JAVA 文件流

1、File类:表示文件对象。
————————————————————–
2、流:用于输入输出的类。
按方向分为输入流和输出流;
按读取单位分为字节流和字符流;
按是否直接与数据源打交道分为节点流和处理流。
—————————————————————-
3、读文件
(1)创建合适的输入流对象。
(2)调用流对象的读方法读取数据。
(3)关闭流。
————————————————————
4、写文件
(1)创建合适的输出流对象。
(2)调用流对象的写方法写数据。
(3)关闭流。
———————————————————————
5、复制文件
边读边写。
——————————————————————-

6、举例
(1)在c盘下建立一个文本文件a.txt,读取里面的内容。
方法一:用字节流,一个字节一个字节读取。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileInputStream fis=new FileInputStream("c:/1.txt");
     while(true){
    	 int a=fis.read();
    	 if(a==-1)
    	   break;
    	 else
    	   System.out.println(a);
     }
fis.close();
}
-------------------------------------------------------------------------------
方法二:用字符流,一个字符一个字符读取
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileReader fr=new FileReader("c:/1.txt");
     while(true){
    	 int a=fr.read();
    	 if(a==-1)
    	   break;
    	 else
    	   System.out.print((char)a);
     }
fr.close();
}
----------------------------------------------------------------------------------
方法三:读取到一个数组中,这里以字符流为例。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileReader fr=new FileReader("c:/1.txt");
     char[] c=new char[100];
     while(true){
    	 int a=fr.read(c);//a代表实际读入的字符个数
    	 if(a==-1)
    	   break;
    	 else
    	   System.out.print(new String(c,0,a));
     }
   fr.close();
}
--------------------------------------------------------------------------------------
方法四:用缓冲流,一次读取一行。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileReader fr=new FileReader("c:/1.txt");
     BufferedReader br=new BufferedReader(fr);     
     while(true){
    	String s=br.readLine();
    	if(s==null){
    		break;
    	}
    	else{
    		System.out.println(s);
    	}
     }
br.close();
}
---------------------------------------------------------------------------------------
(2)写文件
方法一:用字节流,一次写一个字节。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileOutputStream fos=new FileOutputStream("c:/2.txt");//如果以追加方式写,加第二个参数true
     fos.write(65);		
     fos.close();
}
--------------------------------------------------------------------------------------------------
方法二:用字符流,一次写一个字符。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileWriter fw=new FileWriter("c:/2.txt");
     fw.write('哈')	;
     fw.close();
}
----------------------------------------------------------------------------------------------------
方法三:以数组为单位写,这里以字符数组为例。
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
     FileWriter fw=new FileWriter("c:/2.txt");
     String s="Java语言程序设计";
     fw.write(s.toCharArray())	;
     fw.close();
}
-------------------------------------------------------------------------------------------------------
(3)文件复制:用字节流,带缓冲的字节流效率高。
方法一:读一个写一个
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    FileInputStream fis = new FileInputStream("c:/1.txt");

    FileOutputStream fos = new FileOutputStream("c:/2.txt");
    long t1 = System.currentTimeMillis();
    while (true) {
      int k = fis.read();
      if (k == -1) {
        break;
      } else {
        fos.write(k);
      }
    }
    fis.close();
    fos.close();
    long t2 = System.currentTimeMillis();
    System.out.println(t2 - t1);
  }
----------------------------------------------------------------------------------------------------
方法二:读一批写一批
public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    FileInputStream fis = new FileInputStream("c:/1.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    FileOutputStream fos = new FileOutputStream("c:/2.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    long t1 = System.currentTimeMillis();
    while (true) {
      int k = bis.read();
      if (k == -1) {
        break;
      } else {
        bos.write(k);
      }
    }
    bis.close();
    bos.close();
    long t2 = System.currentTimeMillis();
    System.out.println(t2 - t1);
  }
---------------------------------------------------------------------------------------------------

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 − 8 =