Java–File的讲解:
File对象常用方法
-
exist:判断文件是否存在
-
mkdir:创建目录 如果父级不存在 会不成功
-
mkdirs:创建目录 如果父级不存在 会逐层创建
-
createNewFile:创建文件 出现检查性异常 IOException
-
delete:删除文件只能删除空目录或者文件
-
isFile:判断是否是文件
-
isDirectory:判断是否是目录
-
getName:文件名
-
getPath:相对路径,相对文件当前目录 去定位查找目标文件
-
file.renameTo(newFile):将file文件移动到新的地址newFile
-
listFile:返回file下面的子文件或者目录,返回值File[]
-
list:返回file下面所有文件名 返回值String[]
-
length:获取文件字节数量大小:
UTF-8 :一个汉字3个字节 GBK :一个汉字2个字节
File常用类
FileInputStream 类:
字节输入流 通过字节为单位读取文件
read():读取一个字节
read(数组)每次读取了一个数组长度,并且将读取的数据存入数组。
public class TestFileInputStream {
public static void main(String[] args) {
//第一步创建对象FileInputStream
try {
//FileInputStream fis=new FileInputStream("d:\\abc\\java.txt");
//read()每调用一次 表示读取一个字节,返回值是int类型 是字节转换的ascii,如果定义的接受返回值的变量类型和其不一样需要强制类型转换,如果一样不需要。
/* char b= (char) fis.read();
int i=fis.read();
System.out.println(b+" "+i);*/
//下面的是for循环遍历文本,读取所有内容
File f = new File("d:\\\\abc\\\\java.txt");
FileInputStream fis = new FileInputStream(f);
for (int i = 0; i < f.length(); i++) {
int n = fis.read();
System.out.print((char) n);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//结果为:
javatest
Process finished with exit code 0
//标准方式,以后按照这个流程来
public class TestFileInputStream {
public static void main(String[] args) {
//第一步创建对象FileInputStream(创建流对象)
FileInputStream fis=null;
try {
File f = new File("d:\\abc\\java.txt");
fis = new FileInputStream(f);
//读取,写入数据
//read()每调用一次 表示读取一个字节,返回值是int类型 是字节转换的ascii,如果定义的接受返回值的变量类型和其不一样需要强制类型转换,如果一样不需要。
for (int i = 0; i < f.length(); i++) {
int n = fis.read();
System.out.print((char) n);
}
} catch (FileNotFoundException e) {
System.out.println("文件找不到!");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fis!=null)
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
read()不适合做读取文本的原因:
- 读取中文会出现乱码,由于中文,有的3个字节,有的2个字节
- 读取第一次或者第二次可能会把中文拆成两个部分读取*
close()关闭流,关闭资源。
FileOutputStream 类:
是字节输出流 通过字节为单位写入文件
write(字节):写入一个字字节
write(byte数组):写入一个字节数组
close():close()关闭流,关闭资源。
flush():清空缓存,一般处理流会使用它
按照功能分类:
-
节点流:表示可以从某一节点读取数据 或向某个节点写入数据
FileInputStream FileOutputStream FileWriter FileReader
-
处理流:是已经存在的流做了封装,实现更加丰富的流数据的处理方式
可以极大提高读写效率 一般情况下 处理流的构造方法需要填写别的节点流对象如:
BufferedInputStream; BufferedOutputStream; BufferReader; Bufferwriter;
为什么使用缓冲流:
-
不使用缓冲流读写的方式: 他读取一个字节或者一个数组,就会向
指定的路径写入数据,所以 对于的磁盘访问次数过多,会减少磁盘寿命
而且访问本地磁盘的速度是很慢的 -
使用缓冲流读写的方式: 读取一个字节或者一个数组 不会立即去写入
而是先保存在缓冲区域(内存), 等凑够了缓冲流最大脑容量 才会一次性的
写入进去, 可以减少对磁盘读取次数 降低了消耗 还提高了效率
因为访问内存速度高于本地的磁盘速度缓冲流: 属于处理流
BufferedInputStream
BufferedOutputStream