自学内容网 自学内容网

文件与IO流:一

一些常识

硬盘特点

擅长顺序读,不擅长随机读,尤其是机械硬盘。

随机读例如某个目录中的所有小文件的复制,顺序读是某个大文件的整体复制。

windows的文件系统是按照“树形结构”来组织文件。

路径的风格

1.绝对路径:从根节点出发,一层一层最终到达目标文件。

2.相对路径:从当前目录出发,找到目标文件,在IDEA中使用时可以用“.”来代替当前目录。也可以使用“..”来回退至上一层。

“/”与“\”的问题

首先“/”为正统写法,而“\”则是Windows的前身DOS提出的,所以windows额外支持“\”。还是推荐使用“/”。

文件的分类

文本文件:储存的文件在指定码表上都有据可查,都为合法的字符。

二进制文件:任意的二进制数字,不一定合法。

判断方法:可以使用记事本打开,为乱码的是二进制文件。

文本文件

二进制文件

Java中对文件操作的API

一、File类

所在包:java.io;

构造方法:File file = new  File(“文件路径/绝对路径”);

file.getPath():获取文件路径

file.getAbsolutePath():获取文件绝对路径。

file.createNewFile():创建文件。

file.delete():删除文件。

file.exists(): 判断文件是否存在。

file.deleteOnExit():在退出时删除文件。

file.renameTo(file2):将文件重命名为file2。

File file = new File("./src/text2.txt");
        file.createNewFile();
        file.delete();

二、InputStream与OutputStream

1.InputStream  t1 = new FileInputStream("文件路径");

FileInputStream为InputStream的子类。

方法:t1.read();

版本1:每次只读一个字符并返回这个字符的值(ASCII值),而且读到最后会返回-1.

版本2:可以先创建一个空的byte字符数组,当执行完成后字符数组中便传入了文件的内容(ASCII,可以使用char进行强转)。

版本3:在版本2的基础上增加了开始位置off和读入的字符长度len。

为了避免浪费过多的文件描述符表中的位置,每次使用后需要使用t1.close(),为了方便,可以使用try(nputStream  t1 = new FileInputStream("文件路径")){

};

这样在执行完{

}里的内容后,IDEA会自动调动t1.close()。

try(InputStream t1 = new FileInputStream("./src/text.txt")){
            int len = t1.read(buffer);
            for (int i = 0; i < len; i++) {
                System.out.print((char) buffer[i]+" ");
            }
        }

2.OutputStream t2 = new FileOutputStream(“文件路径”);

方法:t2.write();

版本1:一次写一个ASCII值。

版本2:写整个数组。

版本3:写数组的一部分(从off位置开始,写len个字符)。

注意:每次写入会清空原先的内容,可以使用追加来避免:

OutputStream t2 = new FileOutputStream("./src/text.txt",true);

即在末尾加个true。

三、Reader和Writer

1.Reader r = new FileReader(“文件路径”);

方法:

版本1:一次读一个字符。读到末尾返回-1.

版本2:将文件中的内容读到cbuf中去。

版本3:使用了封装了的char数组,

版本4:和前面的类似。

在显示cbuf中的内容时,可以使用String(cbuf,0,n);

n为有效的字符的下标,不然它会将所有的内容打印出来,包含未初始化的部分。

为什么推荐这个方法:在读文件时,如果碰到中文等utf8字符时,使用一次读一个字符的方法,会将utf8转化为unicode来打印,但是由于utf8为三个字节,char为两个字节,所以并不能打印,但是String(cbuf,0,n)可以将unicode转化为utf8.

 char[] cbuffer = new char[100];
        Reader r = new FileReader("./src/text.txt");
        r.read(cbuffer);
        System.out.println(new String(cbuffer,0,8));

2.Write w = new FileWrite("文件路径");

方法:w.write();

五个版本,但是主要使用w.write(String str)来使用字符串输入。

 在写入时也会清除原本的内容,但是也可以使用末尾加true来进行追加。

 Writer w = new FileWriter("./src/text.txt",true);
        w.write("Hello World");
        w.close();

四、Scanner辅助读文件

方法:

Scanner in = new Scanner(new FileInputStream("./src/text.txt"));
while (in.hasNextLine()) {
    String line = in.nextLine();
    System.out.println(line);
}


原文地址:https://blog.csdn.net/wuyunhang123456/article/details/145147257

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!