`

java读写文件笔记

    博客分类:
  • JAVA
阅读更多

 

看代码注释:

 

后面有读写UTF-8编码文件的方法。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

public class IOHelper {

	public static void copy(Reader in, Writer out) throws IOException {
		int c = -1;
		while ((c = in.read()) != -1) {
			out.write(c);
		}
	}
	
	/**
	 * 读取文件内容
	 * 
	 * @param file
	 *            文件
	 */
	public static String readFile(File file) throws IOException {
		Reader in = new FileReader(file);
		StringWriter out = new StringWriter();
		copy(in, out);
		return out.toString();
	}
	
	/**
	 * 写入文件内容
	 * 
	 * @param file
	 *            文件
	 */
	public static void saveFile(File file, String content) throws IOException {
		Writer writer = new FileWriter(file);
		writer.write(content);
		writer.close();
	}

	/**
	 * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
	 * 
	 * @param fileName
	 *            文件的名
	 */
	public static void readFileByBytes(String fileName) {
		File file = new File(fileName);
		InputStream in = null;
		try {
			System.out.println("以字节为单位读取文件内容,一次读一个字节:");
			// 一次读一个字节
			in = new FileInputStream(file);
			int tempbyte;
			while ((tempbyte = in.read()) != -1) {
				System.out.write(tempbyte);
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
			return;
		}
		try {
			System.out.println("以字节为单位读取文件内容,一次读多个字节:");
			// 一次读多个字节
			byte[] tempbytes = new byte[100];
			int byteread = 0;
			in = new FileInputStream(fileName);
			// 读入多个字节到字节数组中,byteread为一次读入的字节数
			while ((byteread = in.read(tempbytes)) != -1) {
				System.out.write(tempbytes, 0, byteread);
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e1) {
				}
			}
		}
	}

	/**
	 * 以字符为单位读取文件,常用于读文本,数字等类型的文件
	 * 
	 * @param fileName
	 *            文件名
	 */
	public static void readFileByChars(String fileName) {
		File file = new File(fileName);
		Reader reader = null;
		try {
			System.out.println("以字符为单位读取文件内容,一次读一个字节:");
			// 一次读一个字符
			reader = new InputStreamReader(new FileInputStream(file));
			int tempchar;
			while ((tempchar = reader.read()) != -1) {
				// 对于windows下,rn这两个字符在一起时,表示一个换行。
				// 但如果这两个字符分开显示时,会换两次行。
				// 因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。
				if (((char) tempchar) != 'r') {
					System.out.print((char) tempchar);
				}
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			System.out.println("以字符为单位读取文件内容,一次读多个字节:");
			// 一次读多个字符
			char[] tempchars = new char[30];
			int charread = 0;
			reader = new InputStreamReader(new FileInputStream(fileName));
			// 读入多个字符到字符数组中,charread为一次读取字符数
			while ((charread = reader.read(tempchars)) != -1) {
				// 同样屏蔽掉r不显示
				if ((charread == tempchars.length)
						&& (tempchars[tempchars.length - 1] != 'r')) {
					System.out.print(tempchars);
				} else {
					for (int i = 0; i < charread; i++) {
						if (tempchars[i] == 'r') {
							continue;
						} else {
							System.out.print(tempchars[i]);
						}
					}
				}
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
	}

	/**
	 * 以行为单位读取文件,常用于读面向行的格式化文件
	 * 
	 * @param fileName
	 *            文件名
	 */
	public static void readFileByLines(String fileName) {
		File file = new File(fileName);
		BufferedReader reader = null;
		try {
			System.out.println("以行为单位读取文件内容,一次读一整行:");
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			int line = 1;
			// 一次读入一行,直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				// 显示行号
				System.out.println("line " + line + ": " + tempString);
				line++;
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
	}

	/**
	 * 随机读取文件内容
	 * 
	 * @param fileName
	 *            文件名
	 */
	public static void readFileByRandomAccess(String fileName) {
		RandomAccessFile randomFile = null;
		try {
			System.out.println("随机读取一段文件内容:");
			// 打开一个随机访问文件流,按只读方式
			randomFile = new RandomAccessFile(fileName, "r");
			// 文件长度,字节数
			long fileLength = randomFile.length();
			// 读文件的起始位置
			int beginIndex = (fileLength > 4) ? 4 : 0;
			// 将读文件的开始位置移到beginIndex位置。
			randomFile.seek(beginIndex);
			byte[] bytes = new byte[10];
			int byteread = 0;
			// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
			// 将一次读取的字节数赋给byteread
			while ((byteread = randomFile.read(bytes)) != -1) {
				System.out.write(bytes, 0, byteread);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (randomFile != null) {
				try {
					randomFile.close();
				} catch (IOException e1) {
				}
			}
		}
	}

   //*****************************************************************************
	// 将内容追加到文件尾部
	/**
	 * A方法追加文件:使用RandomAccessFile
	 * 
	 * @param fileName
	 *            文件名
	 * @param content
	 *            追加的内容
	 */
	public static void appendMethodA(String fileName,

	String content) {
		try {
			// 打开一个随机访问文件流,按读写方式
			RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
			// 文件长度,字节数
			long fileLength = randomFile.length();
			// 将写文件指针移到文件尾。
			randomFile.seek(fileLength);
			randomFile.writeBytes(content);
			randomFile.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * B方法追加文件:使用FileWriter
	 * 
	 * @param fileName
	 * @param content
	 */
	public static void appendMethodB(String fileName, String content) {
		try {
			// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
			FileWriter writer = new FileWriter(fileName, true);
			writer.write(content);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	// 读写文件也有编码的问题,如果要读写指定编码的文件,应采用如下方式覆盖默认编码:
	/**
	 * 指定编码格式写文件
	 * 
	 * @param file
	 * @param data
	 * @param encoding
	 */
	public static void writeStringToFile(File file, String data, String encoding)
        throws IOException
    {
        FileOutputStream fos  = null;
		Writer out = null;
		 try {  
	            fos = new FileOutputStream(file);
	            out = new OutputStreamWriter(fos, encoding);
	            out.write(data);
	            out.close();
	            fos.close();
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        }finally{
	        	if(fos != null){
	        		try {  
	        			fos.close();  
	                } catch (IOException e1) {  
	                }  
	        	}
	        	if(out != null){
	        		try {  
	        			out.close();  
	                } catch (IOException e1) {  
	                }  
	        	}
	        }
    }
    /**
	 * 指定编码格式读文件
	 * 
	 * @param file
	 * @param encoding
	 */
    public static String readFileToString(File file, String encoding)
        throws IOException
    {
        BufferedReader reader = null; 
        FileInputStream fInStream = null;
        StringBuffer result = new StringBuffer();
        try {  
        	fInStream = new FileInputStream(file);
            reader = new BufferedReader(new InputStreamReader(fInStream, "UTF-8"));  
            String tempString = null;  
            while ((tempString = reader.readLine()) != null) {  
                result.append(tempString);
            }  
            fInStream.close();
            reader.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
        	if(fInStream != null) {
        		try {  
        			fInStream.close();  
                } catch (IOException e1) {  
                }  
        	}
            if (reader != null) {  
                try {  
                    reader.close();  
                } catch (IOException e1) {  
                }  
            }  
        } 
        return result.toString();
    }
}

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java文件读写操作

    // 读取文件操作 br.close(); } catch (IOException e) { e.printStackTrace(); } ``` 4. **文件追加模式**: - 如果希望在已有文件的末尾添加内容,可以使用`FileWriter`的构造函数传入`true`,如`new ...

    java超强笔记

    笔记会讲解如何在Java中读写文件,理解流的概念,以及文件的复制、追加等操作。 在面向对象高级特性的部分,笔记可能包含抽象类、接口、内部类、匿名类、枚举,以及泛型和注解的使用。这些特性使得Java代码更加灵活...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

    基于java 采集到笔记本上麦克风的声音并指定输出格式

    在Java编程环境中,声音采集是一项常见的任务,尤其在多媒体应用、语音识别或者录音软件中。本项目专注于通过Java实现从笔记本的麦克风捕获声音,并将其转换为特定的音频格式。下面将详细介绍这个过程涉及的技术点和...

    韩顺平编写的java学习笔记(全)

    4. **文件I/O流编程**:读写文件、数据序列化等。 5. **网络编程**:TCP/IP协议的应用,如客户端/服务器模型。 6. **多线程编程**:利用多线程提高程序性能。 #### Java EE基础知识 1. **Java面向对象编程**:与...

    java笔记 java笔记

    - **跨平台性**:Java的文件操作不受操作系统限制。 - **序列化接口**:用于将对象转换为字节流以便持久化。 - **I/O流基础**:如InputStream、OutputStream等。 - **流的分类**:字节流和字符流。 - **输入输出**:...

    李兴华java笔记

    4. **IO流**:Java的输入/输出流系统提供了丰富的功能,用于读写文件、网络通信等。笔记会讲解流的分类、缓冲流、字符流与字节流的区别,以及NIO(非阻塞I/O)的相关知识。 5. **多线程**:Java支持多线程编程,...

    狂神说Java系列笔记.rar

    IO流是Java中处理数据传输的核心概念,包括字节流和字符流,以及如何进行文件读写、网络通信等操作。 2. **25、SpringBoot入门及原理.pdf**:SpringBoot是Java企业级应用开发的热门框架,简化了Spring的配置和启动...

    java控制台版笔记本

    为了保存和加载笔记,开发者可能利用了Java的文件I/O流,如`FileWriter`和`FileReader`,将笔记序列化为文本文件,或者使用更高级的序列化技术如JSON或XML。 此外,`Notebook`类可能会使用数据结构,如数组、...

    Java开发学习笔记

    Java开发学习笔记主要针对的是初学者,旨在帮助他们掌握Java编程的基础知识。下面将详细讲解Java开发中的核心概念和步骤。 一、Java环境变量设置 在开始Java编程之前,我们需要安装Java Development Kit (JDK)并...

    韩顺平老师java视频课堂笔记

    5. **输入/输出流**:Java的I/O流系统用于读写文件、网络通信等,包括字符流和字节流,以及缓冲流、对象流、文件流等。通过笔记,我们可以学习如何进行数据的读取和写入。 6. **多线程**:Java提供了强大的多线程...

    用java语言笔记本

    【描述】中提到的"Java语言写的笔记本"实际上是一个简单的文本编辑器应用程序,它可能包含了读取、写入、保存文本文件的功能。对于那些刚刚接触Java编程的人来说,这样的项目是一个很好的起点,因为它涵盖了基础的...

    宋红康java笔记.rar

    5. **IO流**:Java的输入/输出流系统支持对文件、网络和其他数据源的数据读写。学习BufferedReader、FileReader、FileWriter等类,理解流的方向、类型以及缓冲区的概念。 6. **多线程**:Java提供了并发编程的支持...

    java日常学习笔记第二篇.md

    java日常学习,关于继承和多态的知识点,还有一些抽象类abstract类和方法的使用,这些是我的个人笔记,在学习过程不懂得东西,也仅供大家参考。

    Java 入门word笔记

    这份“Java入门word笔记”是初学者踏入Java世界的一把钥匙,涵盖了基础语法和XML解析等核心知识点。以下是对这些主题的详细阐述: 一、Java基础语法 1. 变量与数据类型:Java有八种基本数据类型,包括整型(byte, ...

    JAVA经典教材笔记

    ### JAVA经典教材笔记知识点梳理 #### 第一章:JAVA概述及开发环境搭建 - **Java学习概述** - Java作为一种广泛使用的编程语言,其学习路径包括掌握基本语法、理解面向对象编程思想、熟悉标准库使用等。 - **JAVA...

    java笔记 java笔记 java笔记

    - **文件操作**:File类用于文件操作,FileInputStream和FileOutputStream处理文件读写。 - **NIO(New IO)**:Java 1.4引入的非阻塞I/O模型,提高效率。 7. **网络编程**: - **Socket编程**:基于TCP协议的...

    毕向东史上最适合初学者入门的Java基础视频笔记

    文件和IO流是Java中的重要部分,笔记会教给学生如何在Java中读写文件,使用各种输入/输出流进行数据传输。网络编程也是Java的一大应用场景,笔记可能涵盖Socket编程,让学生了解如何创建客户端和服务器进行通信。 ...

    Java随堂笔记

    - **文件操作**:File类的基本操作,如创建、读写文件。 - **缓冲流**:BufferedReader、BufferedWriter等提高读写效率。 - **对象序列化**:将对象转换为字节流存储或网络传输。 6. **多线程** - **线程的创建...

Global site tag (gtag.js) - Google Analytics