Java IO流类对文本文件写入与读取,(FileOutputStream、FileInputStream、FileWriter、FileReader读写文本文件例)

java 对文件内存的读取与写入是通过 流 的操作完成的。从java内存容器的角度去看数据的流的入(Input)与出(Output)。对处理的数据类型区分出字节流与字符流。
在java.io下有一组以File 开头的Stream类实现再对文件的内容写入与读出。

说明
FileOutputStream字节流方式写入文件内容
FileInputStream字节流方式读取文件内容
下面两个类能对字符(串)对文件完成写入与读出,对中文处理实际上更为方方便。
FileWriter以字符流写入文件内容(允许直接字符串写入文件)
FileReader字符流方式读取文件内容

上面4个共公类继承于下面4个抽象类:

类定义说明
java.io.OutputStreampublic abstract class OutputStream extends Object implements Closeable, Flushable流输出类
java.io.InputStream流输入类
java.io.Readerpublic abstract class Reader extends Object implements Readable, Closeable字符输入流
java.io.Writerpublic abstract class Writer extends Object字符输出流

IO中的文件读写类

类定义说明
java.io.FileInputStreampublic class FileInputStreamextends InputStream读文件类
java.io.FileOutputStreampublic class FileOutputStream extends OutputStream写文件类
java.io.FileWriterpublic class FileWriter extends OutputStreamWriter字符串写文件类

java.io.OutputStream 主要方法

返回类型方法说明
voidclose()关闭
voidwrite(byte[] b)输出到 byte 数组 b
voidwrite(byte[] b, int off, int len)指定位置和长度 输出到byte 数组 ,实现部份输出。
说明
public class FileOutputStream extends OutputStream父类:OutputStream ,文件输出类

FileOutputStream 构造方法

构造方法参数说明
public FileOutputStream(File file) throws FileNotFoundExceptionFile file :文件路径实例对象
public FileOutputStream(File file, boolean append) throws FileNotFoundExceptionFile file:文件路径, boolean append :是否追加内容

例1:使用FileOutputStream类 写入文本文件的例程

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 修改一个文本文件的内容
 * 
 * @author wyh
 *
 */
public class FileOutputStreamDemo {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		File file = new File("D:"+ File.separator+"java"+File.separator+"temp"+File.separator+"info.txt" ); // 文件对象
		File pare = file.getParentFile() ; //返回父目录
		if (!pare.exists()) {
			pare.mkdirs(); // 当目录不存在时,建立新的目录
		}
		
		String strinfo = "系统说明";
		
		try {
			
			FileOutputStream outstream = new FileOutputStream(file);
			outstream.write(strinfo.getBytes());  // 写入文件
			outstream.close(); // 关闭资源
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	

	}

}

java.io.InputStream 主要方法

返回类型方法说明参数
intpublic int available() throws IOException返回可用的字节数量
intpublic abstract int read() throws IOException抽象方法。从输入流中读取一个数据字节。返回值>0指读取的字节个数, -1,已全部读取;
intpublic int read(byte[] b) throws IOException读取字节数组。主要方法. b 读取数据的目标字节数组.
intpublic int read(byte[] b, int off, int len) throws IOException从一个字节数组中读取部份数据参数:b - 读取的数据返回的目标数组.off - 起始位置.len - 最大的读取数量.

FileInputStream构造方法

构造方法参数
FileInputStream(File file)File file 要处理的文件路径对象
FileInputStream(FileDescriptor fdObj)fdObj文件描述符类实例
FileInputStream(String name)String name 要处理的字符串文件名

例2:使用 FileInputStream 类,把文件内存读入内存例子:


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author
 *
 */
public class FileInputStreamDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		// TODO 自动生成的方法存根

		// 以下准备一个文件
		File file = new File("D:" + File.separator + "java" + File.separator + "temp" + File.separator + "info.txt"); // 文件对象

		File pare = file.getParentFile(); // 返回父目录
		if (!pare.exists()) {
			pare.mkdirs(); // 当目录不存在时,建立新的目录
		}

		String strinfo = "系统说明";

		try {

			FileOutputStream outstream = new FileOutputStream(file);
			outstream.write(strinfo.getBytes()); // 写入文件
			outstream.close(); // 关闭资源
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

		// 以下使用 FileInputStream 读取上面准备的文本文件内容
		File file2 = new File("D:" + File.separator + "java" + File.separator + "temp" + File.separator + "info.txt"); // 文件对象

		if (!file2.exists()) {
			System.out.println("文件:" + file2.toString() + " 不存在!");
			return;
		}

		int len = (int) file2.length();// 文件的长度
		System.out.println("文件的长度是:" + len);

		FileInputStream input;
		try {
			input = new FileInputStream(file2);
			byte data[] = new byte[len]; // 以文件的长度创建一个字节数组
			int i = input.read(data); // 把文件内空读入内存中的 data字节数组
			System.out.println("文件长度:" + i + " 内容:[" + new String(data).trim() + "]");
			input.close(); // 关闭

			// System.out.println(input.available());
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}

}

public abstract class Writerextends Objectimplements Appendable, Closeable, lushable

返回类型方法说明参数
writerpublic Writer append(char c) throws IOException将指定的字符追加到此写入器。
Writerpublic Writer append(CharSequence csq, int start, int end)将指定字符串序列追加到此写入器。
voidpublic void write(char[] cbuf)输出一个字符数组char[] cbuf :方法的目标输出的字符数组空间
voidpublic void write(String str)输出字符串String str: 接收的字符串对象

FileWriter类继承关系

java.lang.Object
|-- java.io.Writer
|-- java.io.OutputStreamWriter
|-- java.io.FileWriter

FileWriter类构造方法

构造方法说明参数
public FileWriter(File file) throws IOExceptionFile file : 文件路径对象
public FileWriter(File file, boolean append) throws IOException追加写入File file : 文件路径对象;boolean append : true 时追加写入

从 java.io.Writer 类继承的方法:
append, write

方法说明参数
write(String str)向文件写入数据
append(String str)追加写入数据

例3:使用FileWriter类写入字符串类型的数据到一个文本文件

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author 
 *
 */
public class FileWriterDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		File file = new File("D:" + File.separator + "java" + File.separator + "temp" + File.separator + "info.txt"); // 文件对象

		// 保证存在父路径
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}

		FileWriter writer = new FileWriter(file);
		//FileWriter writer = new FileWriter(file,true);  // 追加方式

		String info = "这是我的程序信息文件! ";
		writer.write(info);  // 对文件写入内容
        writer.append("\r\n"); // 换行            // 插入文本
		writer.append("程序参数1:1080\r\n"); // 
		writer.append("程序参数2:720\r\n");

		writer.close(); // 关闭,实际上文件的写入是在关闭时才进行,建议使用手动关闭的方式
		
		System.out.println("完成!");
		

	}

}

重点说明:close(); // 关闭,实际上文件的写入是在关闭时才进行,建议使用手动关闭的方式,我们使用其他流类时也建议采用手动关闭(写上close()关闭方法行)

java.io.Reader类
public abstract class Reader extends Object implements Readable, Closeable

用于读取字符流的抽象类。

返回类型方法说明
intpublic int read(char[] cbuf) throws IOException读字符流至字符数组
intpublic int read(CharBuffer target) throws IOException读字符流至字符缓冲器

java.io.FileReader 文件字符流读取
继承关系
java.lang.Object
|-- java.io.Reader
|-- java.io.InputStreamReader
|–java.io.FileReader

public class FileReader extends InputStreamReader

FileReader 构造方法

构造方法参数说明
public FileReader(File file) throws FileNotFoundExceptionFile file: 文件路径对象
public FileReader(String fileName) throws FileNotFoundExceptionString fileName :文件名字符串

从 java.io.Reader 类继承过来的方法:
mark, markSupported, read, read, reset, skip

例4:使用 FileReader 类从文件读取内容例子


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author wyh
 *
 */
public class FileReaderDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		// 文件路径对象
		File file = new File("D:" + File.separator + "java" + File.separator + "temp" + File.separator + "info.txt"); // 文件对象

		// 保证文件是存在的
		if (!file.exists()) {
			return;
		}
		
		// 创建文件字符流读取对象
		FileReader reader = new FileReader(file);
		
		char cbuf [] = new char[ (int) file.length()]; // 以文件长度创建字符数组
		reader.read(cbuf); // 把文件内存读入字符数组 cbuf
		
		String str= new String(cbuf); //字符数组转字符串
		
		System.out.println(str); // 打印输出
		reader.close(); // 关闭流对象
		
		
	}

}

以上通过 字节流 和字符流读取与写入文本文件的测试完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值