java之IO系列03——文件输入/输出流

在进行对文件内容的操作之前,首先要明确的一点是:输入/输出流都是相对于java而言的,也就是说,输出指的是java向文件输出数据,即写操作;输入指的是文件向java输入数据,即读操作。

目录

1、FileInputStream类与FileOutputStream类

1.1 FileInputStream函数接口

1.2 FileOutputStream函数接口

1.3 案例

2、FileReader类和FileWriter类

2.1 案例


1、FileInputStream类与FileOutputStream类

FileInputStream类与FileOutputStream类都用来操作磁盘文件。如果用户的文件读取需求比较简单,则可以使用FileInputStream类,该类继承自InputStream类,是文件输入流。FileOutputStream类与FileInputStream类对应,提供了基本的文件写入能力。FileOutputStream类是OutputStream类的子类。

1.1 FileInputStream函数接口

FileInputStream(File file)            //构造函数1:打开一个连接到一个实际的文件创建一个 FileInputStream,文件在文件系统的 File对象 file命名。  
FileInputStream(FileDescriptor fdObj) //构造函数2:创建一个 FileInputStream通过文件描述符 fdObj,它代表一个现有连接到文件系统中的一个实际的文件。  
FileInputStream(String name)          //构造函数3:打开一个连接到一个实际的文件创建一个 FileInputStream,文件由文件系统中的路径名 name命名。  

int available()           //返回一个剩余的字节数的估计,可以从这个输入流读取(或跳过),而不阻塞该输入流的方法的下一次调用。  
void close()              //关闭此文件输入流并释放与流关联的任何系统资源。  
protected void finalize() //确保该文件输入流的 close方法被调用时,没有对它的引用。  
FileChannel getChannel()  //返回与此文件输入流有关的独特的 FileChannel对象。  
FileDescriptor getFD()    //返回表示实际的文件在文件系统中的 FileInputStream使用的连接的 FileDescriptor对象。  
int read()                //从这个输入流读取一个字节的数据。  
int read(byte[] b)        //读到 b.length从输入流到字节数组数据字节。  
int read(byte[] b, int off, int len) //读到 len从输入流到字节数组数据字节。  
long skip(long n)         //跳过并丢弃 n字节输入流中的数据。 

1.2 FileOutputStream函数接口

FileOutputStream(File file)                   //构造函数1:创建一个文件输出流写入指定的 File对象表示的文件。  
FileOutputStream(File file, boolean append)   //构造函数2:创建一个文件输出流写入指定的 File对象表示的文件。  
FileOutputStream(FileDescriptor fdObj)        //构造函数3:创建一个文件输出流,写入指定的文件描述符,它表示在文件系统中的实际文件的现有连接。  
FileOutputStream(String name)                 //构造函数4:创建一个文件输出流,用指定的名称写入文件。  
FileOutputStream(String name, boolean append) //构造函数5:创建一个文件输出流,用指定的名称写入文件。 

void close()              //关闭此文件输出流并释放与此流关联的任何系统资源。  
protected void finalize() //清理文件的连接,并确保此文件输出流的 close方法被调用时,没有引用此流。  
FileChannel getChannel()  //返回唯一 FileChannel对象与此文件输出流相关。  
FileDescriptor getFD()    //返回与此流关联的文件描述符。  
void write(byte[] b)      //写 b.length字节从指定的字节数组来此文件输出流。  
void write(byte[] b, int off, int len) //写 len字节指定字节数组中的起始偏移 off此文件输出流。  
void write(int b)         //将指定的字节写入该文件输出流中。  

1.3 案例

import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileTest02 {
	public static void main(String[] args)
	{
        File dir = new File("E:/dir");//新建目录
		dir.mkdirs();
		File file = new File("E:/dir/word.txt");//创建文件对象
		try {
			FileOutputStream out = new FileOutputStream(file);
			byte b[]="hello World!".getBytes();
			out.write(b);//将数组中的信息写入到文件中
			out.close();//关闭流
		}catch(IOException e) {
			e.printStackTrace();
		}
		try {
			FileInputStream in = new FileInputStream(file);
			byte bt[] =new byte[1024];
			int len = in.read(bt);//从文件中读取信息
			System.out.println(new String(bt,0,len));//输出
			in.close();//关闭流
 		}catch(IOException e) {
 			e.printStackTrace();
 		}
	}
}

2、FileReader类和FileWriter类

使用FileOutputStream类向文件中写入数据与使用FileInputStream类从文件中将内容读出来,都存在一点不足,即这两个类都只提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字符流Reader或Writer类即可避免这种现象。FileReader和FileWriter字符流对应了FileInputStream和FileOutputStream类。即FileReader是基于InputStreamReader实现的,FileWriter是基于OutputStreamWriter实现的。FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。

2.1 案例

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

public class FileTest03 {

	public static void main(String[] args)
	{
		File dir = new File("E:/dir");
		dir.mkdirs();
		File file = new File("E:/dir/w.txt");
		try {
			FileWriter fw = new FileWriter(file);
			fw.write("太阳当空照,花儿对我笑");
			fw.close();
		}catch(IOException e) {
			e.printStackTrace();
		}
		try {
			FileReader fr = new FileReader(file);
			char ch[] = new char[1024];
			int len = fr.read(ch);
			System.out.println(new String(ch,0,len));
			fr.close();
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值