IO流之字节输入流和字节输出流
FileOutputStream类
-
如果参数不写true,每次运行都会清空文件数据
-
如果文件不存在会自动创建
构造方法
public FileOutputStream(String name, true)
在之前的文件续写,需要加true,默认false
注意:
-
windows换行符是
\r\n
-
回车符:回到一行的开头
-
换行符:下一行newline
系统中的换行
-
Windows系统里,每行结尾是 回车+换行 ,即 \r\n ;
-
Unix系统里,每行结尾只有 换行 ,即 \n ;
-
Mac系统里,每行结尾是 回车 ,即 \r 。
File file = new File("a.txt"); FileOutputStream fOS = new FileOutputStream(file); FileOutputStream fOS2 = new FileOutputStream("a.txt"); //写入字节数据 //虽然参数为int类型四个字节,但是只会保留一个字节的信息写出 fOS.write(97); fOS2.write(100); // 字符串转换为字节数组 byte[] b = "练习测试".getBytes(); // 写出字节数组数据 fOS.write(b); // 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。 fOS.write(b,2,2); // 定义字节数组 byte[] b2 = {97,98,99,100,101}; // 遍历数组 for (int i = 0; i < b2.length; i++) { // 写出一个字节 fos.write(b2[i]); // 写出一个换行, 换行符号转成数组写出 fos.write("\r\n".getBytes()); } //关闭流文件对象 fOS.close(); fOS2.close();
InputStream字节输入流
FileInputStream类
构造方法
-
FileInputStream(File file) : 创建一个 FileInputStream 文件由文件系统中的 File对象 file命名。
-
FileInputStream(String name) : 创建一个 FileInputStream 文件由文件系统中的路径名 name命名.
当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出 FileNotFoundException 。
读取字节: read 方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回 -1 ,代码使用演示
虽然读取了一个字节,但是会自动提升为int类型
// 使用文件名称创建流对象 FileInputStream fis = new FileInputStream("aa.txt"); // 读取数据,返回一个字节 int read = fis.read(); System.out.println((char) read); read = fis.read(); System.out.println((char) read); read = fis.read(); System.out.println((char) read); read = fis.read(); System.out.println((char) read); read = fis.read(); System.out.println((char) read); // 读取到末尾,返回‐1 read = fis.read(); System.out.println( read); //循环方式代替以上代码 int b ; // 循环读取 while ((b = fis.read())!=‐1) { System.out.println((char)b); } // 关闭资源 fis.close(); // 关闭资源 fis.close();
使用字节数组读取read(byte[] b)
-
每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读 取到末尾时,返回 -1
-
由于最后一次读取时,只读取一个字节 e ,数组中,上次读取的数据没有被完全替换,所以要通过 len ,获取有效的字节
// 使用文件名称创建流对象. FileInputStream fis = new FileInputStream("bbb.txt"); // 文件中为abcde // 定义变量,作为有效个数 int len ; // 定义字节数组,作为装字节数据的容器 byte[] b = new byte[2]; // 循环读取 while (( len= fis.read(b))!=‐1) { // 每次读取后,把数组的有效字节部分,变成字符串打印 System.out.println(new String(b,0,len));// len 每次读取的有效字节个数 } // 关闭资源 fis.close();