目录
可以用/或者\\分隔路径
还可以用File.separator分隔路径,会根据不同系统使用啥分隔符。
桌面路径为:
我电脑的用户名为X
示例:
f1.length():以字节为单位,仅仅是获取该文件夹/文件的大小,如果是文件夹 不是获取文件夹的大小及文件夹里面文件夹的大小之和。
示例:
如果该文件对象是绝对路径的话,则getAbsolutePath就是绝对路径,若是相对路径则会补全为绝对路径(路径都是带后缀的)
示例:
示例:
list()列表的名称及包括文件夹名称也包括文件名称(如图中的授课新得.txt)
listFiles()方法能获取当前文件对象路径的一级文件对象,注意是一级文件对象
示例:
1.当主调是文件,返回null
无需ab.txt存不存在,只要是获取文件的一级目录对象都返回null。
路径不存在的一级目录文件对象返回null
2.当主调是空文件夹是,返回一个长度为0的数组,数组内容为[]。图中aaa是空文件夹
3.当主调是一个有内容的文件夹时,将里面所有的一级文件及文件夹的路径放在File数组中返回(即正常情况)
4.这里只演示第一点
test是桌面上的一个文件夹。现在现在这个文件夹和文件进行隐藏。
可以看到隐藏结果获取到了
案例:改变某个文件夹下的视频序号,要求从19开始
直接输出文件对象,会直接输出该文件对象对应的路径
再找到像要的文件(对象)后如果要打开或执行,可以用以下代码实现
Runtime runtime = Runtime.getRuntime(); runtime.exec(文件对象.getAbsolutePath());
此密码文件夹假如非空,也就是里面有文件或文件夹
注意:流使用完之后必须用.close()方法关闭
常用于拷贝文件,文件传输等操作。
1.单个读取文件内容(每次读一个字节,性能能差,而且因为每次读一个字节读汉字会乱码)
2.循环读取文件内容(每次读一个字节,性能能差,而且因为每次读一个字节读汉字会乱码)
下面进行改善
自定义字节数组byte [] buffer = new byte[每次读取的字节大小]
bug
最终优化后的代码:
性能得到了明显提升,但是还是不能避免读取汉字时会乱码,如下图每次截取3个字节,可能会把汉字中的字节截断
常用于拷贝文件,文件传输等操作。
用完记得用close()方法关闭流
总结
close()方法关闭流。
示例代码:
按需写多个字节
上面的文件写操作都是重新覆盖,要追加文件写的内容,需在下一个参数中填true
要写换行符直接用"\r\n"
实现代码
try-catch执行完成后,会自动执行资源的close()方法
图1-1
格式:
try(
资源
)
资源就是该类实现AutoCloseable接口或者它的父类实现了AutoCloseable也算该子类实现了哦,在代码执行后会自动执行重写的close()方法,如上图1-1。
示例代码:
1.每次读单个字符(性能差)
2.每次读多个字符(推荐)
new FileWriter(File/String, true)中的true表示追加文件内容,默认不填写的话是覆盖文件内容操作。
.write("\r\n");表示写入换行。
注意:字符流写内容的时候,会先把内容存入内存的一块区域暂时保存,当你调用flush或close方法时,才会真正写入到文件中去。若该内容区域满了,还没刷新或关闭的话,会先把这块区域的内容先写入到文件中去,以便存其他写入内容。
所以它的效率比字节输出流的效率高,因为字节输出流每次写文件内容会调用系统资源往文件里面写内容,而字符输出流可以自己控制写入次数
flush()方法刷新流,使得写入数据生效。刷新后还可以使用该流,也可以多次刷新
close()关闭流,使得写入数据生效。关闭流后,不能在使得该流,否则报错“Stream closed ”
对原始流进行加工
代码不变,多了二行包装代码
可定义缓冲池大小,默认8KB
注意:readLine()是该BufferedReader的独有方法,若用多态写法的话,就不能调用该独有功能了。
示例代码:
独有的readLine()方法,不能用多态写法
readLine()读到结尾会返回null,所以可以配合循环来实现读内容
newLine()是该类的独有方法用于写入换行,要调用该方法不能用多态写法,只能该类变量接收。
注意:该字符转换流是针对原始字节流,因为只有字节流才会出现乱码问题,而不针对字符流(字符流不存在乱码问题)。
该字符转换流可以理解为原始字节输入、输出流的字符流。该流还是低级流,可以用缓存流进行包装
示例代码:
示例代码:
如write(97)表示写的是a,而使用打印流write(97)表示可以写的就是这个原始内容97,不进行任何转换。
print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。
print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。
示例代码:
打印后的文件内容为
2.指定写入内容的编码
3.write()会对数字转为ACII码
底层包装了缓存流性能高效。
print(内容)方法表示写入的内容不默认添加换行。而且是该类的独有方法,必须子类变量接收赋值才能使用,多态写法则不能使用该独有方法。
示例代码:
用法和PrintStream一样
正确方式:
格式为new PrintWriter(文件对象)或PrintStream(文件对象) ,文件对象内部必须设置追加模式,如new FileOutputStream("C:\\a.txt", true)
错误方法:
new PrintWriter(文件对象或字符串路径, true)为错误写法。
示例代码:重定向输出到文件
日志文件就是输出重定向到日志文件中记录
要使用独有方法,就不要用多态写法了。
示例代码:
该文件内容还包含了数据类型,以一种特殊形式存储的,不是用来看的
示例代码:
序列化与反序列化:
类要使用序列化,必须实现Serializable接口。
示例代码:
文件内容
示例代码:
1.去官方Commons-io官网下载压缩包
2.解压后复制该jar包到项目中去
3.在项目中新建文件夹lib,并右击Add as Library
4.将该jar包复制到该lib文件夹下就能使用了