File IO

File I/O

一、操作文件或目录的属性

程序的主要任务就是操作数据,通过允许程序读取文件的内容或向文件写入数据,可以使程序应用更为广泛。

1、使用File类操作文件或目录属性

java.io包提供了一些接口和类,对文件进行基本的操作,包括对文件和目录属性的操作、对文件读写的操作等

File对象既可表示文件,也可表示目录。在程序中,一个File对象可以代表一个或目录。利用它可用来对文件或目录进行基本操作。它可以查出与文件相关的信息,如名称,最后修改日期,文件大小等。

创建一个File对象的语法格式如下。

File file=new File(String pathName);

其中,pathName表示所值向的文件路径名。

例如,"File file=new File(“C:\test.txt”);"创建了一个指向C盘根目录下test.txt文本,文件的对象。

File类的常用方法:

方法名称说明
boolean exists()判断文件或目录是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
String getPath()返回此对象表示的文件的相对路径名
String getAbsolutePath()返回此对象表示的文件的绝对路径名
String getName()返回此对象表示的文件或目录路径名
boolean delete()删除此对象指定的文件或目录
boolean createNewFile()创建名称的空文件,不创建文件夹
long length()返回文件的长度,单位为子节,若文件不存在,则返回OL

二、Java的流

读文件,是指把文件中的数据读取到内存中。反之,写文件是把内存中的数据写到文件中。

流,是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。

一个流是一个输入设备或输出设备的抽象表示。可以写数据到流中,也可以从流中读数据。可以把流想象为程序中流进或出的一个字节序列

(1)按照流的流向进行划分,可以分为输入流和输出流

输入流:只能从中读取数据,而不能向其中写入数据

输出流:只能向其中写入数据,而不能从中读取数据

Java的输出流主要由OutputStream和Writer作为基类,而输入流则主要由InputStream和Reader作为基类。

(2)按照所操作的数据单元的不同,流又可划分成子节流和字符流。

字节流操作的最小数据单元为8位的字节,而字符流操作的最小数据单元是16位的字符。

字节流和字符流的区分非常简单,字节流建议用于二进制数据,而字符流用于文本它们的用法几乎是完全一样的。

按照流的流向,我们还可以对字节流和字符流继续划分,分出字节输入流、字节输出流,字符输入流、字符输出流。

三、读写文本文件

1、使用字节流读取文本文件
1、字节输入流InputStream类

字节输入流InputStream的作用就是将文件中的数据输入到内部存储器(简称内存)中,它提供了一系列和读取数据有关的方法,常用的方法如表所示

方法名称说明
int read()读取一个字节数据
int read(byte[] b)将数据读取到字节数据中
int read(byte[] b,int off,int len)从输入流中读取最多len长度的子节,保存到字节数组b中,保存的位置从off开始
void close()关闭输入流
int available()返回输入流读取的估计子节数

无参的read()方法从输入流读取一个八位的字节,把它转换为0~255的整数返回。

有参的两个read()方法从输入流批量读取若干个字节。在从文件或键盘读数据时,采用read(byte[] b)或read(byte[] b,int off,int len)方法可以减少进行物理读文件或键盘的次数,提高输入、输出操作效率。

2、字节输入流FileInputStream类

在实际应用中,我们通常使用InputStream的子类FileInputStream类来实现文本文件内容的读取,常用的构造方法有以下两个。

(1)FileInputStream(File file).其中,file指定文件数据源。使用此构造方法创建文件输入流对象如下。

File file=new File("C:\\test.txt");
InputStream fileObject=new FileInputStream(file);

(2)FileInputStream(String name).其中,name指定文件数据源,包含路径信息。使用此构造方法创建文件输入流对象如下

InputStream in=new FileInputStream("C:\\test.txt")
3、使用FileInputStream读取文件

使用FileputStream读取文本文件的具体使用步骤如下。

(1)引入相关的类

import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;

(2)创建一个文件输入流对象

InputStream fileObject=new FileInputStream("C:\\test.txt")

(3)利用文件输入流的方法读取文本文件的数据

fileObject.available();	//可读取的字节数
fileObject.read();		//读取文件的数据

(4)关闭文件输入流对象

fileObject.close();
2、使用字节流写文本文件
1、字节输出流OutputStream类

字节输出流OutputStream类的作用是把内存中的数据输出到文件中,它提供了一系列向文件中写数据的有关方法,常用的方法如表所示

方法名称说明
void write(int c)写入一个字节数据
void write(byte[] buf)写入数组buf的所有字节
void write(byte[] b,int off,int len)将字节数组中从off位置开始,长度为len的字节数据输出到输出流中
void close()关闭输出流
2、字节输出流FileOutputStream类

在实际应用中,我们通常使用OutputStream的子类FileOutputStream类来实现向文本文件写入数据,常用的构造方法有以下三个

(1)FileOutStream(File file).其中,file指定文件目标数据源。使用此构造方法创建文件输出对象如下

File file=new File("C:\\test.txt");
FileOutputStream fos=new FileOutputStream(file);

(2)FileOutputStream(String name).其中,name指定文件目标数据源,包含路径信息。使用此构造方法创建文件输出流对象如下。

FileOutputStream fos=new FileOutputStream("C:\\test.txt");

(3)FileOutputStream(String name,booleam append)。其中,name指定文件目标数据源,包含路径信息。append表示是否在文件末尾添加数据,若设置为true,则在文件末尾添加数据。使用此构造方法创建文件输出流对象如下

FileOutputStream fos=new FileOutputStream("C:\\test.txt",true);
3、使用FileOutputStream写文本文件

使用FileOutputStream向文本文件中写入数据的具体使用步骤如下。

(1)引入相关的类

import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;

(2)构造一个文件输出流对象

OutputStream fos=new FileOutputStream("C:\\test.txt");

(3)利用文件输出流的方法把数据写入文本文件中

String str="好好学习Java";
byte[] words=str.getBytes();
//利用write方法将数据写入文件中去
fos.write(words,0,words.length);

(4)关闭文件输出流

fos.close();
3、使用字符流读取文本文件
1、字符输入流Reader类

Reader类是读取字符流的抽象类,它提供了常用的方法,如表所示

方法名称说明
int read()从输入流中读取单个字符
int read(byte[] c)从输入流中读取c.length长度的字符,保存到字符数组c中,返回实际读取的字符数
read(char[] c,int off,int len)从输入流中读取最多len的长度字符,保存到字符数组c中,保存的位置从off位置开始,返回实际读取的字符长度
void close()关闭流
2、字符输入流FileReader类

FileReader类是Reader的子类,常用的构造方法格式如下

FileReader(String fileName)

其中,fileName是指要从中读取数据的文件的名称。使用此构造方法创建字符输入流对象如下

Reader fr=new FileReader("C:\\myTest.txt");
3、使用FileReader读取文件

使用字符流类FileReader读取文本文件的具体步骤如下

(1)引入相关的类

import java.io.Reader;
import java.io.FileReader;
import java.io.IOException;

(2)创建一个FileReader对象

Reader fr=new FileReader("C:\\myTest.txt");

(3)利用FileReader类的方法读取文本文件的数据

int read();			//读取单个字符

(4)关闭相关的流对象

fr.close();
4、字符输入流BufferedReader类

BufferedReader类是Reader类的子类,它与FileReader类的区别在于,BufferedReader类带有缓冲区,它可以先把一批数据读到缓冲区,接下来的读操作作都是从缓冲区内获取数据,避免每次都从数据源读取数据进行字符编码转换,从而提高读取操作的效率。BufferedReader类常用的构造方法格式如下。

BufferedReader(Reader in)

使用此构造方法创建字符输入对象如下

Reader fr=new FileReader("C:\\myTest.txt");
BufferedReader br=new BufferedReader(fr);

其中,br就是创建的一个使用默认大小输入缓冲区的缓冲字符输入流

5、使用FileReader和BufferedReader读取文本文件

使用字符流类BufferedReader和FileReader读取文本文件的具体步骤如下

(1)引入相关的类

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

(2)创建一个BufferedReader对象

Reader fr=new FileReader("C:\\myTest.txt");
BufferedReader br=new BufferedReader(fr);

(3)利用BufferedReader类的方法读取文本文件的数据

br.readLine();	//读取一行数据,返回字符串

readLine()方法是BufferedReader类特有的方法,用来按行读取内容

(4)关闭相关的流对象

br.close();
fr.close();
4、使用字符流写入文本文件
1、字符输出流writer类

writer类是向文件写入数据的字符流,它提供了常用的方法,如表所示

方法名称说明
write(String str)将str字符串里包含的字符输出到指定的输出流中
write(String str,int off,int len)将str字符串里从off位置开始长度为len的字符输出到输出流中
void close()关闭输出流
void flush()刷新输出流
2、字符输出流FileWriter类

FileWriter类是Reader的子类,常用的构造方法格式如下

FileWriter(String fileName)

其中,fileName表示与系统有关的文件名,使用此构造方法创建字符输出对象如下

Writer fr=new FileWriter("C:\\myTest.txt");
3、使用FileWriter写入文本文件

使用字符流类FileWriter将数据写入文本文件的具体操作步骤如下

(1)引入相关的类

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

(2)创建一个FileWriter对象

Writer fw=new FileWriter("C:\\myTest.txt");

(3)利用FileWriter类的方法写入文本文件

bw.write("hello");

(4)相关流对象的清空和关闭

bw.flush();	//刷新该流的缓冲
fw.close();	//关闭此流
4、字符输入流BufferedWriter类

BufferedWriter类是Writer类的子类.BufferedWriter与BufferedReader的流方向正好相反,BufferedWriter是把一批数据写到缓冲区,当缓冲区满的时候,再把缓冲区的数据写到字符输出流中。这可以避免每次都执行物理写操作,从而提高输入/输出操作的效率。BufferedWriter类的常用构造方法如下

BufferedWriter(Writer out)

使用此构造方法创建字符输出流对象如下

Writer fr=new FileWriter("C:\\myTest.txt");
BufferedWriter br=new BufferedWriter(fw);

其中,bw就是创建的一个使用默认大小输入缓冲区的缓冲字符输入流

5、使用BufferedWriter和FileWriter文本文件

使用字符流类BufferedWriter和FileWriter将数据写入文本文件的具体操作步骤如下

(1)引入相关的类

import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

(2)构造一个BufferedWriter对象

FileWriter fw=new FileWriter("C:\\myTest.txt");
BufferedWriter bw=new BufferedWriter(fw);

(3)利用BufferedWriter类的方法写文本文件

bw.writer("hello");

(4)相关流对象的清空和关闭

bw.flush();	//刷新该流的缓冲
fw.close();	//关闭此流

四、二进制文件的读写

1、使用字节流类DataInputStream读二进制文件

DataInputStream类是FileInputStream的子类,它是FileInputStream类的扩展。利用DataInputStream类读取二进制文件的实现步骤其实与用FileInputStream类读取文本文件的步骤极其相似,而且还要用到FileInputStream类

具体操作步骤如下

(1)引入相关的类

import java.io.FileInputStream;
import java.io.DataInputStream;

(2)构造一个数据输入流对象

FileInputStream fis=new FileInputStream("C:\\HelloWorld.class");
DataInputStream dis=new DataInputStream(fis);

(3)利用数据输入流类的方法读取二进制文件的数据

dis.read();

(4)关闭数据输入流

dis.close();
2、使用字节流类DataOutputStream写二进制文件

DataOutputStream类是FileOutputStream的子类,它是FileOutputStream类的扩展。利用DataOutputStream类写二进制文件的实现步骤其实与用FileOutputStream类写文本文件的步骤极其相似,而且还要用到FileOutputStream类。具体操作步骤如下

(1)引入相关的类

import java.io.FileOutputStream;
import java.io.DataOutputStream;

(2)构造一个数据输出流对象

FileOutputStream outFile=new FileOutputStream("C:\\temp.class");
DataOutputStream out=new DataOutputStream(outFile);

(3)利用数据输出流类的方法写二进制文件的数据

out.write(1);	//将指定字节数据写入二进制文件

(4)关闭数据输出流

out.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值