前言
java中io流一直是一个令人头疼的东西,主要是各种流,各种缓冲器太多,不好记忆,所以感觉学起来很费劲,选择起来也比较烦恼。
本文主要针对java的io流读取数据使用io流读取文件和向文件中写数据,并根据个人经验讲解应该怎么选择和使用。
需要的知识点:
1.字节流和字符流选择
字节流:字节流读取的时候,读到一个字节就返回一个字节; 主要用于读取图片,MP3,AVI视频文件。
字符流:字符流使用了字节流读到一个或多个字节,如读取中文时,就会一次读取2个字节。只要是处理纯文本数据,就要优先考虑使用字符流。
2.处理流和节点流
节点流:和操作系统紧密连接的流。该层的与文件输入输出的操作都比较原始,没有进过优化,功能比较单一。
(FileReader,FileWriter和FileInputStream,FileOutStream都是输入节点流。)
处理流:该层流是对节点流的封装,对节点流中进行优化,加入缓冲器,提供更加丰富的API等。我们一般都使用处理流,在创建处理流对象的时候一般都需要节点流对象作为其构造参数。
(BufferedInPutStream,BufferedOutPutStream和BufferedWriter,BufferedReader)
对于这种带缓冲器的处理流与对应的节点流的最大区别可以参考:http://fjding.iteye.com/blog/2311233
本文重点讲解文件的读取和输出。
1. 文件的读取(节点流FileInputStream读取字节流)
public static void readFileByBytes(String fileName) { // 一般先创建file对象 FileInputStream fileInput = null; try { File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } byte[] buffer = new byte[1024]; fileInput = new FileInputStream(file); int byteread = 0; // byteread表示一次读取到buffers中的数量。 while ((byteread = fileInput.read(buffer)) != -1) { System.out.write(buffer, 0, byteread); } } catch (Exception e) { // TODO: handle exception } finally { try { if (fileInput != null) { fileInput.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2. 文件读取(节点流FileReader读取字符流)
public static void readFileByChars(String fileName) { FileReader reader = null; try { File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } reader = new FileReader(file); char[] buffer = new char[1024]; int charread = 0; while ((charread = reader.read(buffer)) != -1) { System.out.print(buffer); } } catch (IOException e) { // TODO: handle exception } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
其实FileReader也是需要FileInputStream对象转换的,要借助于InputStreamReader转换流。
3.文件的读取通过BufferedReader读取数据。
public static void readByBufferedReader(String fileName) { try { File file = new File(fileName); // 读取文件,并且以utf-8的形式写出去 BufferedReader bufread; String read; bufread = new BufferedReader(new FileReader(file)); while ((read = bufread.readLine()) != null) { System.out.println(read); } bufread.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }
4.向文件中写入数据(字节流FileOutputStream)
public void writeByFileOutputStream() { FileOutputStream fop = null; File file; String content = "This is the text content"; try { file = new File("c:/newfile.txt"); fop = new FileOutputStream(file); // if file doesnt exists, then create it if (!file.exists()) { file.createNewFile(); } // get the content in bytes byte[] contentInBytes = content.getBytes(); fop.write(contentInBytes); fop.flush(); fop.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fop != null) { fop.close(); } } catch (IOException e) { e.printStackTrace(); } } }
5. 向文件中写数据(FileReader)【注意使用FileReader(“path”,true)可以往文件后面追加内容,否则就直接覆盖了】
public static void writeByFileReader() { try { String data = " This content will append to the end of the file"; File file = new File("javaio-appendfile.txt"); // if file doesnt exists, then create it if (!file.exists()) { file.createNewFile(); } // true = append file FileWriter fileWritter = new FileWriter(file.getName(), true); fileWritter.write(data); fileWritter.close(); } catch (IOException e) { e.printStackTrace(); } }
6.采用BufferedWriter向文件中写数据
public static void writeByBufferedReader() { try { String content = "This is the content to write into file"; File file = new File("/users/mkyong/filename.txt"); // if file doesnt exists, then create it if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file, true); BufferedWriter bw = new BufferedWriter(fw); bw.write(content); bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } }
总结:
对于我来说,一般使用io来操作文件比较多一些,一般都喜欢用BufferedReader和BufferedWriter,使用它们的一般流程是,先创建File对象(可以对路径和文件进行更多的操作),然后通过File对象创建FileReader(FileWriter)【当然在这里也可以通过创建InputStreamReader(new InputStream)来获取reader对象,看个人爱好】,然后通过FileReader(FileWriter)获得BufferedReader(BufferedWriter)对象。对于读入文件,还可以使用Scanner对读取的文件进行操作,这个比较方便,Scanner也是处理流,因此也是需要节点流作为其参数的。
参考:
http://blog.csdn.net/yuebinghaoyuan/article/details/7388059
http://www.docin.com/p-747385065.html
http://blog.csdn.net/zzp_403184692/article/details/8057693
http://www.jb51.net/article/47062.htm
相关推荐
文件的写入操作与读取类似,可以使用`OutputStream`和`Writer`及其子类。在处理文本文件时,`FileWriter`和`BufferedWriter`较为常见。下面是一个使用`BufferedWriter`写入文件的例子: ```java try ...
- **文件读取**:利用`BufferedReader` 和 `BufferedWriter` 对象实现文件内容的读写操作。 #### 示例代码 ```java // 示例代码片段,展示如何使用FileUtil类 public class TestFileUtil { public static void ...
### Java 二进制文件的读写操作 在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类...
Java编程语言提供了丰富的API用于处理文件操作,包括创建、读取、写入和删除文件等。在Java中,写文件是通过`java.io`包中的类实现的,主要涉及File类、FileWriter类、BufferedWriter类等。下面将详细阐述Java写文件...
9. **相关工具与库**:有一些开源库如BCEL(Byte Code Engineering Library)和ASM提供API,可以方便地读写和修改Java类文件,简化开发过程。 10. **学习资源**:理解类文件格式的官方文档是《Java Virtual Machine...
在Java编程中,读写文件是一项基础且重要的任务,...以上就是关于“Java读写文件(txt)”的知识点,包括文件的读取、内容转换、正则匹配以及文件的写入。希望这些内容能帮助你理解和掌握Java在文件操作上的基本技能。
Java读写文件-Excel
在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...
在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...
### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
Java 文件读写操作大全 ...Java 文件读写操作大全对 Java 文件读写操作进行了详细介绍,包括获得控制台用户输入的信息、复制文件和写文件等多种操作。这些知识点可以帮助开发者更好地掌握 Java 文件读写操作。
这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...
总的来说,处理Java中CSV文件的中文乱码问题主要涉及正确设置字符编码,而给定的.NET DLL文件与此问题的解决没有直接关联。如果你在.NET环境中遇到类似问题,可以参考.NET的编码处理方式,或者寻找适合的.NET库来...
根据给定的文件信息,我们将深入探讨Java读写文件文本文件的关键知识点,这些知识点主要集中在文件的读取、写入以及流的复制等操作上。 ### Java读取文本文件 在Java中,读取文本文件通常涉及到使用`InputStream`...
### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
Java版本的NetCDF库使得开发者能够在Java环境中方便地进行NetCDF文件的读取和写入操作。 1. **NetCDF简介** - NetCDF是一种通用的数据模型,不仅定义了数据结构,还包含了元数据,用于描述数据的含义和布局。 - ...
使用 Java 实现对 dbf 文件的简单读写 Java 是一种广泛使用的编程语言,对于读写 dbf 文件具有重要的应用价值。本文将介绍使用 Java 实现对 dbf 文件的简单读写,包括读写 dbf 文件的基本步骤、相关类的介绍、代码...
java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写