zoukankan      html  css  js  c++  java
  • java文本文件读写

    java的IO系统中读写文件使用的是Reader和Writer两个抽象类,Reader中的read()和close()方法是抽象方法,Writer中的write()、flush()和close()方法也是抽象方法,子类应该分别实现他们。

    JavaIO已经为我们提供了三个方便的Reader的实现类,FileReader、InputStreamReader和BufferReader。其中最重要的是InputStreamReader类,它是字节转换为字符的桥梁。可以再构造器重指定编码方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。

    首先给出一个FileReader读txt的例子,很简单。

    FileReader fr = new FileReader("C:/Test.txt");
    int ch = 0;
    while((ch=fr.read())!=-1){
         System.out.println((char)ch);
    }

    其中read方法返回的是读取的下一个字符。

    再给出一个InputStramReader读txt的例子,也很简单。

    1 InputStream is = new FileInputStream(new File(filepath));
    2 InputStreamReader fr = new InputStreamReader(is);
    3 int ch = 0;
    4 while((ch=fr.read())!=-1){
    5     System.out.println((char)ch);
    6 }

    这里可以看出这和FileReader没什么区别,只是需要用到的其他类对象比较多,可以简单理解,我要用的是InputStreamReader这个东西,所以就要有InputStreamReader来让我Reader,所以要建立一个InputStream,而这个InputStream是要读文件的,所以要用文件读取流来读文件,内部参数为文件对象。

    事实上,在FileReader中的方法都是从InputStreamReader中继承过来的。

    read()方法比较耗费时间,为了提高效率,我们可以使用BufferedReader对Reader进行包装,这样可以提高读取速度,进而一行一行的读取文本。

    如:

    1 BufferedReader br = new BufferedReader(new FileReader(filepath));
    2 String data = br.readLine();//一次读一行,直到null为结束
    3 while(data!=null){
    4     System.out.println(data);
    5     data = br.readLine();
    6 }

    这里注意最后读到的是null的时候结束,中间可以有多个单纯的换行而不结束。

    有读就有写。写文本可以使用PrintWriterFileWriterBufferWriter三种方法。

    代码如下

     1      FileWriter fw = new FileWriter("D:/Test.txt");    
     2         String s = "hello world";    
     3         fw.write(s,0,s.length());    
     4         fw.flush();    
     5           
     6         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));    
     7         osw.write(s,0,s.length());    
     8         osw.flush();    
     9           
    10         PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);    
    11         pw.println(s);    
    12           
    13         fw.close();    
    14         osw.close();    
    15         pw.close(); 

    以上代码都是从头开始写文件,先把文件原内容删掉,然后再写入新的数据,如果想接着源文件内容写,在声明FileWriter fw时,里面参数加个true就行了,即

    FileWriter fw = new FileWriter("test.txt",true);

    上面是FileWriter和PrintWriter的例子,再写个BufferWriter的例子,

     1 File file = new File("D:/Test.txt");  
     2 File dest = new File("D:/new.txt");  
     3 try {  
     4     BufferedReader reader = new BufferedReader(new FileReader(file));  
     5     BufferedWriter writer  = new BufferedWriter(new FileWriter(dest));  
     6     String line = reader.readLine();  
     7     while(line!=null){  
     8         writer.write(line);  
     9         line = reader.readLine();  
    10     }  
    11     writer.flush();  
    12     reader.close();  
    13     writer.close();  
    14 } catch (FileNotFoundException e) {  
    15     e.printStackTrace();  
    16 } catch (IOException e) {  
    17     e.printStackTrace();  
    18 }  

    代码写完,下面说下他们的不同

    PrintWriter  提供print系方法,以字符为单位,支持汉字。
    BufferedWriter   提供缓冲,用以加速   
    FileWriter   用于写文件

    OutputStreamWriter以字节为单位,不支持汉字。

    PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println()方法可以写不同平台的换行符,而BufferedWriter可以任意设定缓冲大小。

    OutputStream可以直接传给PrintWriter(BufferedWriter不能接收),如:  
     

     PrintWriter out = new PrintWriter(new BufferedOutputStream(new FileOutputStream("foo.out")));   

    PrintStream类是过滤器类中一个不可忽视的成员,最基本的标准输出就要借助于它——我们常用的System.out变量就是PrintStream实例。与之对应的字符流类是PrintWriter类。  

    以上就是基本的文件读写操作内容,需要多加练习与使用才能对其有更好的理解。

    本文代码均为自己手敲试验过的。

    参考的原文网址:http://lapulande.iteye.com/blog/706051

  • 相关阅读:
    Java中两个Long对象如何比较是否相等
    微信小程序data数组push和remove问题
    微信小程序let和var以及const有什么区别
    小程序开发之弹出框
    Windows系统下如何卸载干净mysql
    jQuery序列化表单
    ssm框架使用详解&配置两个数据源
    nginx在一个服务器上配置两个项目,并通过两个不同的域名访问
    nginx跨域设置&文件上传大小限制
    Navicat11连接oracle数据库
  • 原文地址:https://www.cnblogs.com/Pillar/p/4208975.html
Copyright © 2011-2022 走看看