`

Java文件简单读写(转)

    博客分类:
  • Java
阅读更多

  最近用Java处理文件的时候,同样遇到了中文问题,觉得还是有必要总结一下,也使该系列的文章更加完整。
    熟悉Java 的人都知道,在Java中,IO是分成两大部分的,分别对应字节和字符的操作,也就是Stream和Character,它们之间可以相互转换,桥梁就是StreamInputReader/StreamOutputWriter。为了更加清楚的了解它们之间的关系,我们可以看看它们所在的类结构。

  • java.lang.Object
    • java.io.InputStream (implements java.io.Closeable)
    • java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)
    • java.io.RandomAccessFile (implements java.io.Closeable, java.io.DataInput, java.io.DataOutput)
    • java.io.Reader (implements java.io.Closeable, java.lang.Readable)
      • java.io.BufferedReader
      • java.io.InputStreamReader
        • java.io.FileReade
    • java.io.Writer (implements java.lang.Appendable, java.io.Closeable, java.io.Flushable)
      • java.io.BufferedWriter
      • java.io.OutputStreamWriter
        • java.io.FileWriter

     上面列出来的并不是Java.io中全部的类,但是对于文件读写来说已经足够了。通常,我们使用以下代码来进行文件的读写:

    java 代码
    1. public void naiveWrite() throws IOException{   
    2.   FileWriter fw = new FileWriter("test.txt");   
    3.   fw.write("中文你好");   
    4.   fw.close();   
    5.  }   
    6.   
    7.  public String naiveRead() throws IOException{   
    8.   FileReader fr = new FileReader("test.txt");   
    9.   BufferedReader br = new BufferedReader(fr);   
    10.   String str = br.readLine();   
    11.   br.close();   
    12.   fr.close();   
    13.   return str;   
    14.  }  

       如果我们的是中文平台,上面代码是可以正常运行的。但是如果我们把这些代码放到一个ISO8859-1的系统上,中文问题就出来了(当然,前提你在javac的时指定了编码方式,如javac -encoding gb2312 ***.java,参看该系列前面的文章)。为什么呢?这是因为FileWriter和FileReader是辅助类,为了方便大家使用 OutputSteamWriterer 和 InputStreamReader 而屏蔽了字符集的设定操作,而采用系统默认的编码方式,而这在很多情况下也能满足用户的需求。在中文系统中,系统的默认编码方式一般是GBK,因此文件中中文的读写是没有问题的。但是,当程序运行在ISO8859-1的系统中时,JVM使用ISO8859-1对中文进行编码,当然就认不到了,于是那一个个的问号就来了。
        那怎么办呢?既然捷径走不通,我们就只好使用OutputSteamWriter 和 InputStreamReader了。

    java 代码
    1. public void write() throws IOException{   
    2.   OutputStreamWriter osw = new OutputStreamWriter(   
    3.                        new  FileOutputStream("test.txt"), "utf-8");   
    4.   osw.write("中国万岁");   
    5.   osw.close();   
    6.  }   
    7.  public String read() throws IOException{   
    8.   InputStreamReader isr = new InputStreamReader(   
    9.         new FileInputStream("test.txt"),"utf-8");   
    10.   BufferedReader br = new BufferedReader(isr);   
    11.   String str = br.readLine();   
    12.   br.close();   
    13.   isr.close();   
    14.   return str;   
    15.  }  
         在这里,我们指定文件读写的编码方式为utf-8,当然对于中文来说GBK和GB2312也是可以的,但是推荐使用UTF-8,这样对于软件的国际化很有好处。其实,这里指定编码方式进行文件的写入跟我们使用记事本等编辑器的另存为,并且指定格式为“UTF-8”在本质上是一样的。通过上述处理后,程序就可以跨平台运行了。
        在处理文件的过程中,我们还会用到RandomAccessFile这个类来随机访问文件。这里,如果我们写入字符串的时候调用writeChars,那么,如果写入的是中文,中文问题就又会出现了。因为此时RandomAccessFile并没有使用系统的默认编码来写入文件,而是直接将内存中的二进制数据直接写到文件中去。如何解决这个问题呢?只要读写对称就行了。
    java 代码
    1. public void randWrite() throws IOException{   
    2.   RandomAccessFile raf = new RandomAccessFile("test1.txt","rw");   
    3.   raf.writeChars("中国你好");   
    4.   raf.close();   
    5.  }   
    6.  public String randRead() throws IOException{   
    7.   RandomAccessFile raf = new RandomAccessFile("test1.txt","r");   
    8.   StringBuffer sb = new StringBuffer();   
    9.   while( raf.getFilePointer() < raf.length()){   
    10.    sb.append( raf.readChar() );   
    11.   }   
    12.    raf.close();   
    13.   return sb.toString();   
    14.  }     
  • 但是这样处理起来不是很方便,我们可以这样写:

    java 代码
    1. public void randWrite() throws IOException{   
    2.   RandomAccessFile raf = new RandomAccessFile("test1.txt","rw");   
    3.   raf.writeUTF("中国你好");   
    4.   raf.close();   
    5.  }   
    6.  public String randRead() throws Exception{   
    7.   RandomAccessFile raf = new RandomAccessFile("test1.txt","r");   
    8.   String str = raf.readUTF();   
    9.   raf.close();   
    10.   return str;   
    11.  }  

       好了,文件读写的中文问题就解决了。

    http://blog.csdn.net/smartcat86/article/details/4085739)另一篇不错文件读写介绍

    分享到:
    评论

    相关推荐

      JAVA简单的读写文本文件的代码

      通过上述四个主要部分的分析,我们可以看到Java语言在处理文件读写方面提供了丰富的API支持。使用合适的类库可以极大地简化开发工作并提高程序的性能。例如,使用`StringBuffer`可以有效地处理字符串的动态增长;而`...

      java实现文件的读写操作

      在Java编程语言中,文件的读写操作是日常开发中不可或缺的部分。无论是处理用户数据、配置文件,还是进行数据持久化,都需要用到文件的读写功能。本篇将详细介绍如何在Java中实现文件的读写操作,并通过一个小例子...

      java 二进制文件的读写操作

      ### Java 二进制文件的读写操作 在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类...

      使用Java实现对dbf文件的简单读写

      使用 Java 实现对 dbf 文件的简单读写 Java 是一种广泛使用的编程语言,对于读写 dbf 文件具有重要的应用价值。本文将介绍使用 Java 实现对 dbf 文件的简单读写,包括读写 dbf 文件的基本步骤、相关类的介绍、代码...

      java简单的读写文件小程序

      这个"java简单的读写文件小程序"很可能是用来演示如何使用Java API进行文件操作的基本概念。下面,我们将深入探讨Java中读取和写入文件的相关知识点。 1. **Java.IO 包**:Java.IO 包提供了所有与输入/输出相关的类...

      JAVA 操作文件,读写。

      在Java编程语言中,文件操作是一项基础且重要的任务,涵盖了读取、写入、复制、移动和删除等操作。在这个程序中,我们关注的是如何使用Java的IO流(Input/Output Stream)来读取多个TXT文件的内容,并将其合并到一个...

      java读写properties配置文件

      ### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...

      java操作文件读写

      在Java编程语言中,文件操作是一项基础且重要的任务,涵盖了从简单的文本文件读写到复杂的二进制数据处理。本文将深入探讨Java中各种文件读写的方式,以及如何在读写Word文档时解决可能出现的乱码问题。 首先,Java...

      读写文件操作demo-java

      在Java编程语言中,文件的读写操作是日常开发中不可或缺的部分。本示例"读写文件操作demo-java"旨在教你如何使用Java进行文件的读取和写入,这对于处理数据存储、日志记录或是任何需要与磁盘交互的应用程序至关重要...

      java读写xml文件

      ### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...

      java读写hdf5格式文件需要使用的库

      这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...

      文件读写+图形用户界面

      1、 文件读写 包括两个内容:查找文件中“java”字符串的个数;利用命令行参数显示文件的最后指定行。 在查找“java”字符串个数的程序中,先读出文件内容,再逐个字符对比,找出“java”字符,最终把结果写入另一...

      最简单易懂的一个java读写文件的操作

      总结来说,这个简单的Java文件读写示例展示了如何使用IO流进行文件操作。通过`FileReader`和`BufferedReader`读取文件,用`FileWriter`和`BufferedWriter`写入文件,结合`newLine()`方法处理换行,我们可以实现对...

      java 删除某行和读写txt文件

      ### Java删除某行和读写TXT文件 在Java中,如果需要从文本文件中删除特定行,实际上并没有直接提供这样的方法。通常的做法是先将文件中的所有内容读取到内存中,然后根据需要过滤掉不需要的行,最后再将处理后的...

      java读写文件

      在Java编程语言中,读写文件是常见的操作,...总的来说,Java的文件读写功能强大且灵活,无论是简单的文本处理还是复杂的二进制数据操作,都能应对自如。了解并熟练掌握这些知识点,将对日常的开发工作带来极大的便利。

      在Java中读写Excel文件

      在Java中读写Excel文件是一项常见的任务,尤其是在数据处理、报表生成或数据分析等场景下。Apache POI是一个广泛使用的开源库,它允许开发者使用Java语言来处理Microsoft Office格式的文件,包括Excel(XLS和XLSX)...

      Java写的关于INI文件读写,以及其它操作

      INI文件是一种简单的文本格式,通常用于存储应用程序的设置和配置信息。在这个Java项目中,开发者创建了一个功能,使得程序能够读取、写入和管理INI文件,同时结合了Swing组件来提供用户界面,使得用户可以直接在...

      java中读写XML文件

      在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和...在提供的"在java中读写XML文件.ppt"和"源码"中,可能包含了更多详细的步骤和示例代码,可以帮助你进一步理解这个主题。

    Global site tag (gtag.js) - Google Analytics