java基础之IO操作

JAVA中针对文件的读写操作设置了一系列的流,FileInputStream,FileOutputStream,FileReader,FileWriter是四种最为常用的流

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputStream f = new FileInputStream("C:/java/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);

创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。

序号方法描述
1public void close() throws IOException{}关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2protected void finalize()throws IOException {}这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3public int read(int r)throws IOException{}这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。
4public int read(byte[] r) throws IOException{}这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。
5public int available() throws IOException{}返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

实例代码

import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * io标准操作步骤
 * 1、选择源
 * 2、选择流
 * 3、进行操作(操作字节数组)
 * 4、释放资源
 * @author ww
 *
 */
public class IOTest03 {

	public static void main(String[] args) {
		//1、选择源
		File file=new File("src/com/ww/iostudy02/abc.txt");
		//2、选择流
		InputStream is=null;
		try {
			is=new FileInputStream(file);
			int len=-1; //返回的长度
			byte[] flush=new byte[1024*10];//缓冲区
			//3、操作
			while((len=is.read(flush))!=-1)
			{
				//字节数组-->字符串(解码)
				String str=new String(flush,0,len);
				System.out.println(str);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			//4、释放资源
			try {
				if(is!=null) //如果文件为空(没有用到),不需要关闭  防止空指针
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

FileOutputStream

FileOutputStream流是指文件字节输出流,专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性

创建FileOutputStream流以写入数据到File对象表示的文件。 如果第二个参数为true,则字节将写入文件的末尾而不是开头。 创建一个新的FileDescriptor对象来表示此文件连接。其抛异常的规则与第一个构造函数一致

public FileOutputStream(File file,boolean append) throws FileNotFoundException{}
序号方法描述
1void close()关闭此文件输出流并释放与此流相关联的任何系统资源。
2protected void finalize()清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。
3FileChannel getChannel()返回与此文件输出流相关联的唯一的FileChannel对象。
4FileDescriptor getFD()返回与此流相关联的文件描述符。
5void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。
6void write(byte[] b, int off, int len)将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。
7void write(int b)将指定的字节写入此文件输出流。

在文件末尾追加
实例代码

import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 文件字节输出流
 * 1、选择源
 * 2、选择流
 * 3、进行操作(写入)
 * 4、释放资源
 * @author ww
 *
 */
public class IOTest04 {

	public static void main(String[] args) {
		//1、选择源
		File file=new File("src/com/ww/iostudy02/test.txt");
		//2、选择流
		OutputStream os=null;
		try {
			//os=new FileOutputStream(file);
			//追加
			os=new FileOutputStream(file,true);
			//3、操作(写入)
			String str="IO is so easy";
			byte[] datas=str.getBytes();//字符串-->字节数组(编码)
			os.write(datas);
			os.flush();//刷新
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			//4、释放资源
			try {
				if(os!=null) //如果文件为空(没有用到),不需要关闭  防止空指针
				os.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

FileReader

FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据。可以通过以下几种构造方法创建需要的对象。

在给定从中读取数据的 File 的情况下创建一个新 FileReader。

FileReader(File file)

在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。

FileReader(FileDescriptor fd) 

在给定从中读取数据的文件名的情况下创建一个新 FileReader。

FileReader(String fileName) 

创建FIleReader对象成功后,可以参照以下列表里的方法操作文件。

序号方法描述
1public int read() throws IOException读取单个字符,返回一个int型变量代表读取到的字符
2public int read(char [] c, int offset, int len)读取字符到c数组,返回读取到字符的个数

遍历文本实例代码:

import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

/**
 * 文件字符输入流
 * 1、选择源
 * 2、选择流
 * 3、进行操作(操作字节数组)
 * 4、释放资源
 * @author ww
 *
 */
public class IOTest05 {

	public static void main(String[] args) {
		//1、选择源
		File file=new File("src/com/ww/iostudy02/abc.txt");
		//2、选择流
		Reader reader=null;
		try {
			reader=new FileReader(file);
			int len=-1; //返回的长度
			char[] flush=new char[1024];//缓冲区
			//3、操作
			while((len=reader.read(flush))!=-1)
			{
				//字符数组-->字符串
				String str=new String(flush,0,len);
				System.out.println(str);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			//4、释放资源
			try {
				if(reader!=null) //如果文件为空(没有用到),不需要关闭  防止空指针
					reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

FileWriter

FileWriter 类从 OutputStreamWriter 类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。

在给出 File 对象的情况下构造一个 FileWriter 对象。

FileWriter(File file)

在给出 File 对象的情况下构造一个 FileWriter 对象。

FileWriter(File file, boolean append)

参数:

file:要写入数据的 File 对象。
append:如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则写入文件开始处。
构造与某个文件描述符相关联的 FileWriter 对象。

FileWriter(FileDescriptor fd)

在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。

FileWriter(String fileName, boolean append)

创建FileWriter对象成功后,可以参照以下列表里的方法操作文件。

序号方法描述
1public void write(int c) throws IOException写入单个字符c。
2public void write(char [] c, int offset, int len)写入字符数组中开始为offset长度为len的某一部分。
3public void write(String s, int offset, int len)写入字符串中开始为offset长度为len的某一部分。

实例

import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;

/**
 * 文件字符输出流
 * 1、选择源
 * 2、选择流
 * 3、进行操作(写入)
 * 4、释放资源
 * @author ww
 *
 */
public class IOTest06 {

	public static void main(String[] args) {
		//1、选择源
		File file=new File("src/com/ww/iostudy02/test.txt");
		//2、选择流
		Writer writer=null;
		try {
			writer=new FileWriter(file);
			//追加
//			writer=new FileWriter(file,true);
			//3、操作(写入)
			//写法一
//			String str="IO is so easy\n许昌学院";
//			char[] datas=str.toCharArray();//字符串-->字节数组(编码)
//			writer.write(datas);
			//写法二
//			String str="IO is so easy\n许昌学院";
//			writer.write(str);
			//写法三
			writer.append("IO is so easy\n").append("许昌学院");
			writer.flush();//刷新
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			//4、释放资源
			try {
				if(writer!=null) //如果文件为空(没有用到),不需要关闭  防止空指针
					writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值