前言
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 ...
### 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中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...
根据给定的文件信息,我们将深入探讨Java读写文件文本文件的关键知识点,这些知识点主要集中在文件的读取、写入以及流的复制等操作上。 ### Java读取文本文件 在Java中,读取文本文件通常涉及到使用`InputStream`...
### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...
使用 Java 实现对 dbf 文件的简单读写 Java 是一种广泛使用的编程语言,对于读写 dbf 文件具有重要的应用价值。本文将介绍使用 Java 实现对 dbf 文件的简单读写,包括读写 dbf 文件的基本步骤、相关类的介绍、代码...
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
2. **Java读取CSV文件**: - 使用`BufferedReader`和`InputStreamReader`组合,可以指定字符编码读取文件。例如: ```java FileInputStream fis = new FileInputStream("path_to_file.csv"); InputStreamReader ...
Java版本的NetCDF库使得开发者能够在Java环境中方便地进行NetCDF文件的读取和写入操作。 1. **NetCDF简介** - NetCDF是一种通用的数据模型,不仅定义了数据结构,还包含了元数据,用于描述数据的含义和布局。 - ...
java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写java 文件读写 java 文件读写