输入输出流

File类(java.io.File)的主要方法:

(1)File(String pathname):将给定路径名字符串转换为抽象路径名来创建新的File实例

(2)boolean exists():判断File对象对应的文件或目录是否存在

(3)File getAbsoluteFile():获取File对象对应的绝对路径名形式

(4)String getAbsolutePath():获取File对象对应的绝对路径名字符串

(5)String getName():获取File对象表示的文件或目录的名称

(6)boolean isAbsolute():判断File对象对应的抽象路径名是否为绝对路径名

(7)boolean isDirectory():判断File对象代表的是否是一个目录

(8)boolean isFile():判断File对象代表的文件是否是一个标准文件

(9)boolean isHidden():判断File对象代表的文件是否是一个隐藏文件

(10)long lastModified(): 获取File对象代表的文件最后一次被修改的时间

(11)long length():获取File对象代表的文件的长度

(12)String[] list():获取File对象对应的目录中的文件和目录列表

流(Stream)的分类:

数据流的流动方向:输入流和输出流

流动的内容:字节流(8位)和字符流(16位)

InputStream:字节输入流,是所以字节输入流的父类

OutputStream:字节输出流,是所以字节输出流的父类

Reader流:处理字符输入流列的父类,是一个抽象类,不能实例化它的对象

Writer类:处理字符输出流的父类

InputStream类的常用方法:

FileInputStream(String name):通过打开一个到实际文件的连接来创建实例对象

int available():返回此输入流的数据读取方法可以读取的有效字节数

void close():关闭此输入流并释放与该流关联的所以系统资源

abstract int read():从输入流中读取下一个数据字节

int read(byte[] b):从输入流中读取一定数量的字节,并存储在数组b中

int read(byte[] b,int off,int len):将输入流中最多len个数据字节读入byte数组

long skip(long n):跳过和丢弃此输入流中n个字节的数据

OutputStream类的常用方法:

FileOutputStream(String name):创建一个向指定文件写入数据的输出文件流

void close():关闭当前输出流并释放与此流相关的所以系统资源

void flush():刷新当前输出流并强制将缓冲区的字节写入文件

void write(byte[] b):将b数组中的字节写入当前输出流

void write(byte[] b,int off,int len):将数组中下标从off开始的len个字节写入输出流

abstract void write(int b):将指定的字节写入此输出流

Reader类的常用方法:

read():从流中读入一个字符

read(char[]):从流中将一些字符读入数组

ready():判断是否准备好读取此流

reset():重置该流

skip(long n):跳过参数n指定的字符数量

Writer类的常用方法:

abstract void close():先刷新流,然后关闭该流

void write(char[] cbuf):将字符数组的内容写入流

void write(int c):向流中写入单个字符

void write(String str):向流中写入字符串

void write(String str,int off,int len):将字符串的某一部分写入流

FileInputStream:该类是InputStream类的子类

public class Test {

public static void main(String[] args) {

int rs;

byte[] b = new byte[10];//创建一个字节数组,用于临时存放从文件中读取的内容

try{

File f = new File("D:\\in.txt");

FileInputStream fis = new FileInputStream(f);//根据D盘的文件"in.txt"创建的File对象,创建FileInputStream类的实例对象fis,此时打开磁盘文件"in.txt"并建立与该文件的连接,通过该文件就可以读取内容了

rs = fis.read(b,0,10);//调用实例对象的read方法,从文件中读取最多10个字节的数据,并放入数组b中,如果已经读到文件的尾部,该方法会返回一个负数,否则返回读取的字节数

while(rs > 0){

String s = new String(b,0,rs);//将字节数组的内容转换为字符串对象输出,然后继续读取文件的内容

System.out.print(s);

rs = fis.read(b,0,10);

}

fis.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

在使用FileInputStream类进行文件读取时,要注意一下几点:

(1)待读取的文件一定要存在,否则会出现异常:java.io.FileNotFoundException: D:\in.txt (系统找不到指定的文件。)

(2)文件的路径乐意采用绝对路径和相对路径两种,例子中采用的是绝对路径,编程时,可以把待读取的文件放在程序文件所在的项目下,通过

FileInputStream fis = new FileInputStream("in.txt");创建FileInputStream实例对象,有利于提高程序的可移植性

(3)FileInputStream类既可以用来读取文本文件,也可以读取二进制文件,比如:图片、声音等。

(4)在不需要使用时,要及时关闭流对象,释放与它关联的所以系统资源

FileOutputStream:该类是OutputStream类的子类

public static void main(String[] args) {

int rs;

byte[] b = new byte[10];

try {

FileInputStream fis = new FileInputStream("notepad.exe");

FileOutputStream fos = new FileOutputStream("note.exe");

System.out.println("开始拷贝文件,请稍后...");

rs = fis.read(b,0,10);

while(rs > 0){

fos.write(b,0,10);

rs = fis.read(b,0,10);

}

System.out.println("文件拷贝结束,谢谢!");

fis.close();

fos.close();

catch (IOException e) {

e.printStackTrace();

}

}

程序分析:首先根据提供的两个文件创建字节输入流对象fis和和字节输出流对象fos,建立与磁盘文件的连接;如果文件"notepad.exe"不存在,会引发异常;不管"note.exe"文件是否存在,fos的创建都不会受影响。

FileOutputStream类执行写操作时,只能从文件的开始部分写入,不能实现追加写入的功能。

FileReader流:该类是Reader类的子类,实现了从文件中读取字符数据,是文件字符输入流。所创建的文件必须存在,不然异常。

public static void main(String[] args)
{
try
{
File f = new File("java.txt");
FileReader fr = new FileReader(f);
int len = fr.read();
while(len >= 0)
{
System.out.print((char)len);
len = fr.read();
}
fr.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}

FileWriter流:该类是Writer类的子类,实现了将字符数据写入文件的功能,是文件字符输出流。如果写入的文件不存在,则会新建该文件,否则会删除旧文件,建立新的文件。

public static void main(String[] args)
{
Random rand = new Random();
try
{
FileWriter fw = new FileWriter("rand.txt");
int rs;
for(int i = 0; i < 5; i++){
rs = rand.nextInt(2000);
fw.write(String.valueOf(rs) + " ");
}
fw.write("JavaEE教程");
fw.close();
} catch (IOException e)
{
e.printStackTrace();
}

}

;