您的位置:首页 > 其它

IO流

2014-04-14 21:34 48 查看
说到IO流,那么输入\ 输出流的作用是什么呢?在什么情况下用到它呢?所谓的知其然并且要知其所以然嘛!一个Java程序必须有与外界交流的能力,这就要求Java语言必须提供输入输出功能。说到这里我们就必须引入 java.io包

因为就文件或流进行操作,就必须声明:import java.io.*;那么又为什么提到文件操作呢?--java程序中对文件的操作,主要就是读取和写入,这两个操作都要使用到输入输出流,在对文件进行写入时使用的是输入流,而读取文件使用的是输出流。

一: File类

File类常用的构造方法有:

1.File(String pathname) //pathname 可以是目录或文件名

2.File f1 = new File("Demo.txt"); //在当前目录下创建一个与"Demo.txt"文件名相关联的文件对象

3.File f2 = new File("C:\\Users\\Administrator\\Desktop\\io"); //指明详细的路径以及文件名,注意双斜线

File类常用的方法有:

1.boolean exists() //判断文件是否存在,存在返回true,否则返回false

2.boolean isFile() //判断是否为文件,是文件返回true,否则返回false

3.boolean isDirectory() //判断是否为目录,是目录返回true,否则返回false

4.String getName() //获得文件的名声

5.String getAbsolutePath() //获得文件的决定路径

6.long length() //获取文件的长度(字节数)

7boolean createNewFile()//创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉

8.boolean delete() //删除文件,删除成功返回true,否则返回false

9.File[] listFile() //返回文件夹内的子文件与子文件夹的数组

public class FileTest {

public static void main(String[] args) {
File file = new File("wenjian/first.txt");
//exists 测试此抽象路径名表示的文件或目录是否存在
System.out.println("file是否存在: "+file.exists());
System.out.println("file是否是文件: "+file.isFile());
System.out.println("file的大小: "+file.length());
System.out.println(file.getName());
System.out.println(file.getAbsolutePath());

try{
//creatNewFile 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
file.createNewFile();
}catch(Exception e){
e.printStackTrace();
}
query("C:\\Users\\Administrator\\Desktop\\画图板");
}

//统计当前目录下的所有的文件的具体路径
public static void query(String path){
//构造一个file对象
File file = new File(path);
//获取file下的所有的File对象
//listFiles() 表示返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
File[] files =  file.listFiles();
//遍历数组
for(int i=0;i<files.length;i++){
//得到每个File对象
File f = files[i];
//判断是文件还是文件夹
//isFile() 测试此抽象路径名表示的文件是否是一个标准文件
//isDirectory 测试此抽象路径名表示的文件是否是一个目录
//getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
if(f.isFile()){
System.out.println("文件名: "+f.getAbsolutePath());
}else if(f.isDirectory()){
//递归
query(f.getAbsolutePath());
}
}
}

}


二:流

流可以分为字节流和字符流。

字节流:字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和OutputStream(输出字节流)类,因为InputStream和OutputStream是抽象类,所以不能直接生成对象。可以通过它们的子类来生存程序中所需要的对象。

字符流:字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,非常适合处理字符串和文本,对字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类

1.使用字节流读取文件

FileInputStream 和 FileOutputStream 类用于从文件读取字节和向文件写入字节,它们的所以方法都是从InputStream 和 OutputStream 继承的,这两个类没有定义新的方法。在创建FileInputStream类时,首先要检查一下指定的文件是否存在。如果不存在那么从文件读取就会失败,这时会产生一个FileNotFoundException异常。

FileInputStream的构造方法有:

FileInputStream(File file) throws FileNotFoundException

FileInputStream(String name) throws FileNotFoundException

FileInputStream的常用方法

int read() throws IOException //如果读到末尾则返回-1

int read(byte[] b) throws IOException //将读到的数据存放到byte型数组中,一样读到末尾时返回-1

void close() throws IOException

FileOutputStream的构造方法:

FileOutputStream(File file) throws FileNotFoundException

FileOutputStream(String name) throws FileNotFoundException

FileOutputStream(File file,boolean append) throws FileNotFoundException

FileOutputStream(String name,boolean append) throws FileNoFoundException //如果append设为true,将保存现有文件中的内容,并把新的数据追加到现有文件。

public class FileOperationTest {

public static void main(String[] args) {
readFile("wenjian/first.txt");

}
//读文件
public static void readFile(String fileName){
try{
//构造一个文件输入流对象
FileInputStream fis = new FileInputStream(fileName);
//开始读文件
int i = fis.read();
while(i!=-1){
System.out.print((char)i);
//继续读
i = fis.read();
}
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

2.使用字符流读写文件

从文件读取字符或向文件写入字符,FileReader 和 FileWriter 是两个使用很方便的类,它们与外部文件一起构成输入输出流。FileReader 和 FileWriter 的成员方法都是从其超类(reader writer)中继承的。

FileReader的构造方法:

FileReader(String filename) throws FileNotFoundException

FileReader(File file) throws FileNotFoundException

FileWriter的构造方法:

FileWriter(File file) throws IOException

FileWriter(String filename) throws IOException

FileWriter(File file,boolean append) throws IOException

FileWriter(String filename,boolean append) throws IOException

BufferedReader 和 BuffereddWriter 是缓冲数据流,它们通过减少读写 I/O 设备的次数加快输入输出的速度。输入时,预先把字符成块的读入内存缓区,每次读字符是从缓冲区中取出的。输出时,把字符写入内存缓冲区,然后再整块写入文件。

BufferedReader的构造方法:

BufferedReader(Reader in)

BufferedReader(Reader in,int size)

BuffereddWriter的构造方法:

BufferedWriter(Writer out,int size)

BufferedWriter(Writer out)

我们都知道,超类变量可以引用子类对象。in 通常引用一个FileReader对象,out通常引用一个FileWriter对象,size指缓冲区的大小。

当使用FileWriter类 和 BufferedWriter 类时用 write()方法写文件,使用FileReader 类 和 BufferedReader 类时用readLine()方法读取字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: