Java当中的IO(二)
1. 大文件的读写方法
2. 字符流的使用方法
1. 大文件的读写方法
buffer大小总有个尽头
假如1G = 1024 * 1024 * 1024 byte 不可能产生这么大的buffer吧
因此应该循环读取数据, 一次读写一小段
右键-属性-from.txt有2345kb, 每次读取1024kb时, 3次即可读完
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileInputStream fis = null ; 6 FileOutputStream fos = null ; 7 try{ 8 fis = new FileInputStream("e:/Java/src/IO2/from.txt"); //这一句可能会异常 9 fos = new FileOutputStream("e:/Java/src/IO2/to.txt"); 10 byte [] buffer = new byte[1024]; 11 while(true){ 12 int temp = fis.read(buffer,0,buffer.length); 13 if(temp == -1) { //temp=-1表示文件已经读完 14 break; 15 } 16 fos.write(buffer,0,temp); 17 } 18 } 19 catch(Exception e){ 20 System.out.println(e); 21 } 22 } 23 }
fis = new FileInputStream("e:/Java/src/IO2/from.txt"); fos = new FileOutputStream("e:/Java/src/IO2/to.txt");
上面两行代码, 相当于在from.txt 和 to.txt上插上了两根管子, 输入输出流通过管道传输
但是用完之后需要关掉管子, 故在catch后面加上fianlly来关掉
1 finally{ 2 fis.close(); 3 fos.close(); 4 }
编译后发现报错, 因为close本身也可能异常, 故需改如下
1 import java.io.*; 2 3 class Test{ 4 public static void main(String args []){ 5 FileInputStream fis = null ; 6 FileOutputStream fos = null ; 7 try{ 8 fis = new FileInputStream("e:/Java/src/IO2/from.txt"); //这一句可能会异常 9 fos = new FileOutputStream("e:/Java/src/IO2/to.txt"); 10 byte [] buffer = new byte[1024]; 11 while(true){ 12 int temp = fis.read(buffer,0,buffer.length); 13 if(temp == -1) { //temp=-1表示文件已经读完 14 break; 15 } 16 fos.write(buffer,0,temp); 17 } 18 } 19 catch(Exception e){ 20 System.out.println(e); 21 } 22 finally{ 23 try{ 24 fis.close(); 25 fos.close(); 26 } 27 catch(Exception e){ 28 System.out.println(e); 29 } 30 } 31 } 32 }
2. 字符流的使用方法
上面都是以字节读取
字符流, 读文件时以字符为基础
字节输入流:Reader <- FileReader
int read(char [] c, int off , int len)
字节输出流:Writer <- FileWriter
void write(char [] c, int off , int len)
1 import java.io.*; 2 3 class TestChar{ 4 public static void main(String args []){ 5 FileReader fr = null ; 6 FileWriter fw = null ; 7 try{ 8 fr = new FileReader("e:/Java/src/IO21/from.txt"); //这一句可能会异常 9 fw = new FileWriter("e:/Java/src/IO21/to.txt"); 10 char [] buffer = new char[100]; 11 int temp = fr.read(buffer , 0 , buffer.length); 12 for(int i = 0 ; i < buffer.length; i++) 13 { 14 System.out.println(buffer[i]); 15 } 16 } 17 catch(Exception e){ 18 System.out.println(e); 19 } 20 } 21 }
打印出来abcde后面全是空字符
1 import java.io.*; 2 3 class TestChar{ 4 public static void main(String args []){ 5 FileReader fr = null ; 6 FileWriter fw = null ; 7 try{ 8 fr = new FileReader("e:/Java/src/IO21/from.txt"); //这一句可能会异常 9 fw = new FileWriter("e:/Java/src/IO21/to.txt"); 10 char [] buffer = new char[100]; 11 int temp = fr.read(buffer , 0 , buffer.length); 12 fw.write(buffer,0,temp); 13 } 14 catch(Exception e){ 15 System.out.println(e); 16 } 17 finally{ 18 try{ 19 fr.close(); 20 fw.close(); 21 } 22 catch(Exception e){ 23 System.out.println(e); 24 } 25 } 26 } 27 }