`

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文件读写操作

    java学习笔记,新手入门,java文件读写的一些例子!

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

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

    java jdk8 学习笔记

    Java编译语言将Java代码编译成.class文件(只有一种形式),而C/C++语言将代码编译成01码,不同的操作系统的01码指令不同,这造成了不能跨平台,而Java将这个任务交给JVM,不同操作系统上的JVM将.class文件编译成不同...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    个人JAVA笔记汇总

    个人JAVA笔记汇总,包括jxl读写Excel文件,文件上传保存下载, 读xml,log4j,hibernate/struts简单的笔记,j2se,java swing应用,j2me各方面编程等

    java笔记.docx

    Java中的变量必须先声明后使用。 Java中的数组是对象,可以使用new关键字创建。...Java中的文件处理可以使用File类和IO流进行读写操作。 Java中的网络编程可以使用Socket和ServerSocket实现基于网络的应用程序开发。

    java学习笔记 读写配置问价xml格式 。

    java操作xml文件大家可以借鉴一下 利用dom4j第三方jar包 支持增加 删除 修改 查询

    java代码笔记2010-06-11:java_x_文件_字节流,创建一个一个文件目录,在该目录下创建一个文件 txt, 然后写入内容进去, 再读取文件.

    NULL 博文链接:https://jayxigua.iteye.com/blog/690203

    某大学往年期末考试题:Java考试(含答案).docx

    某大学往年期末考试题:Java考试(含答案).docx 了解Java的基本概念和语法。...掌握Java的文件读写操作,包括读写文件、处理文件路径等。 熟悉Java的多线程编程,包括创建线程、同步线程、线程池等。

    java课堂笔记总.docx

    输入输出(IO): 如何在Java中进行文件和流的读写操作,以及如何处理输入输出。 集合框架: 学习使用Java提供的集合框架来管理和操作数据集合,如数组、列表、集合和映射等。 多线程编程: 学习如何创建和管理多...

    JavaSE_复习笔记(用笔记软件eDiary打开).edf

    JavaSE_复习笔记(用笔记软件eDiary打开).edf

    java-io-file类笔记

    也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。此外,File还浏览子目录层次结构。很多程序中...

    java IO流学习笔记——(2)文件字符流&字节数组流

    FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 部分方法同文件字节流(read(),write()) 其他方法: FileWriter:append()写入 name.append...

    java NIO学习系列 笔记

    Contents: 1 核心概念以及基本读写 2 缓冲区的实现机制 3 连网与异步IO 4 分散和聚集IO 5 文件锁定

    java IO流学习笔记——(1)文件字节流

    java IO流学习笔记——(1) IO流总述 • 输入流:数据源到程序(InputStream、Reader读进来) • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理...

    java.xmind

    java基础到Java高级的笔记,从java的JDK下载开始,到JAVA基础语句和语法,到常用类,日期类,多线程,I/O流,到JDK8的反射

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题72:数据库的读写分离.mp4 │ Java面试题73:数据库优化之缓存.mp4 │ Java面试题74:sql语句优化小技巧.mp4 │ Java面试题75:批量插入几百万条数据.mp4 │ Java面试题76:有没有使用过redis.mp4 │ ...

    Java学习笔记-个人整理的

    {7.1}Java的文件系统管理}{103}{section.7.1} {7.2}回调模式与FileFilter}{104}{section.7.2} {7.3}\ttfamily RandomAccessFile}{106}{section.7.3} {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的...

    JAVA基于SNMP网络设备MIB信息采集(论文+源代码+读书笔记)

    系统在设定设备IP地址及端口号和读写共同体名后能查看相应设备的基本信息。在加载MIB信息文件后可自动生成MIB树型模式,用户则可根据需要查看设备各项细节,亦可进行设定操作。查看基本信息时,用户可自行选择是否...

    JAVA记事本【可拖读文件】源码

    JAVA记事本终于完成了,在过些天从里面选出部分做个笔记整理,增加对JAVA图形界面、事件响应的熟悉。然后就该学习数据库操作了; 记事本的主要功能: (一).支持直接拖入文本并读取内容; (二).状态栏:1.显示文本...

Global site tag (gtag.js) - Google Analytics