Java文件的读取与写入

概要:

将字符串写入指定文件中,首先需要确认文件以及目录是否存在,如果不存在必须新建文件。

将字符串写入文件中,需要先将字符串读到BufferedReader缓冲流中,将文件写入到BufferedWriter缓冲流中。然后根据循环将字符串写入BufferedWriter缓冲流中。写入完毕后必须关闭BufferReader缓冲流,以防其他线程访问该文件失败。

文本文件转换为字符串,需要指定字符串的编码方式。通常默认的编码方式是Unicode编码,若不指定,会显示中文乱码。

将文本文件转换为字符串,需要将指定文件写入到InputStreamReader中。文本文件的内容读取到StringWriter文本写入流中。读取完毕后必须关闭InputStreamReader,以防出现未关闭流异常。

| |目录

代码

package net.xsoftlab.baike;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
public class StringFromOrToFile {
	public static int DEFAULT_BUFFER_SIZE = 1000;
	/**
	 * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)
	 * 
	 * @param res
	 *            原字符串
	 * @param filePath
	 *            文件路径
	 * @return 成功标记
	 */
	public static boolean stringToFile(String res, String filePath) {
		boolean flag = true;
		BufferedReader bufferedReader = null;
		BufferedWriter bufferedWriter = null;
		try {
			File distFile = new File(filePath); // 创建文件
			if (!distFile.getParentFile().exists()) // 判断父路径是文件夹是否存在
				distFile.getParentFile().mkdirs(); // 可以在不存在的目录中创建文件夹
			bufferedReader = new BufferedReader(new StringReader(res)); // 将原字符串读入缓冲
			bufferedWriter = new BufferedWriter(new FileWriter(distFile)); // 将文件写入缓冲
			char buf[] = new char[1024]; // 字符缓冲区
			int len;
			while ((len = bufferedReader.read(buf)) != -1) { // while循环
				bufferedWriter.write(buf, 0, len); // 将字符串写入文件
			}
			bufferedWriter.flush(); // 刷新写入流的缓冲
			bufferedReader.close(); // 关闭读出流
			bufferedWriter.close(); // 关闭写入流
		} catch (IOException e) { // 捕获异常
			e.printStackTrace();
			flag = false;
			return flag;
		} finally { // finally方法总被执行
			if (bufferedReader != null) { // 判断读出流是否为空
				try {
					bufferedReader.close(); // 确保读出流关闭
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return flag; // 返回布尔类型
	}
	/**
	 * 文本文件转换为指定编码的字符串
	 * 
	 * @param file
	 *            文本文件
	 * @param encoding
	 *            编码类型
	 * @return 转换后的字符串
	 * @throws IOException
	 */
	public static String fileToString(String filePath, String encoding) {
		InputStreamReader reader = null;
		StringWriter writer = new StringWriter();
		try {
			if (encoding == null || "".equals(encoding.trim())) { // 判断编码类型是否为空
				reader = new InputStreamReader(new FileInputStream(new File(
						filePath)), // 设置编码方式
						encoding);
			} else {
				reader = new InputStreamReader(new FileInputStream(new File(
						filePath))); // 文件进入输入流
			}
			char[] buffer = new char[DEFAULT_BUFFER_SIZE];
			int n = 0;
			while (-1 != (n = reader.read(buffer))) { // while循环
				writer.write(buffer, 0, n); // 将输入流写入输出流
			}
		} catch (Exception e) { // 捕获异常
			e.printStackTrace();
			return null;
		} finally { // finally总被执行
			if (reader != null)
				try {
					reader.close(); // 确保输入流关闭
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return writer.toString(); // 返回转换结果
	}
	public static void main(String[] args) {// java程序的主入口方法
		String res = "字符串写入指定文件
文本文件转换为指定编码的字符串";
		String filePath = "E:/text/1.txt"; // 文件
		String encoding = "GB2312"; // 编码格式设置
		System.out.println("字符串写入指字文件是否成功:" + stringToFile(res, filePath)); // 调用方法将字符串写入文件
		System.out.println("从" + filePath + "文件根据" + encoding + // 调用方示读取文件的内容
				"编码格式读到的内容:
" + fileToString(filePath, encoding));
	}
}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消