在进行对文件内容的操作之前,首先要明确的一点是:输入/输出流都是相对于java而言的,也就是说,输出指的是java向文件输出数据,即写操作;输入指的是文件向java输入数据,即读操作。
目录
1、FileInputStream类与FileOutputStream类
1.1 FileInputStream函数接口
1.2 FileOutputStream函数接口
1.3 案例
2、FileReader类和FileWriter类
2.1 案例
FileInputStream类与FileOutputStream类都用来操作磁盘文件。如果用户的文件读取需求比较简单,则可以使用FileInputStream类,该类继承自InputStream类,是文件输入流。FileOutputStream类与FileInputStream类对应,提供了基本的文件写入能力。FileOutputStream类是OutputStream类的子类。
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字节输入流中的数据。
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) //将指定的字节写入该文件输出流中。
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();
}
}
}
使用FileOutputStream类向文件中写入数据与使用FileInputStream类从文件中将内容读出来,都存在一点不足,即这两个类都只提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字符流Reader或Writer类即可避免这种现象。FileReader和FileWriter字符流对应了FileInputStream和FileOutputStream类。即FileReader是基于InputStreamReader实现的,FileWriter是基于OutputStreamWriter实现的。FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余的内容,直到源的末尾或流被关闭。
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();
}
}
}