Java中通过file类来对一个文件(包括目录)进行抽象的描述。并且有File类对象,并不代表真实存在该文件。认识File类,就先了解File类的属性,构造方法,方法。
属性:
修饰符及类型 属性
说明
static String pathSeparator 依赖于系统的路径分隔符,String
类型的表示
static char pathSeparator 依赖于系统的路径分隔符,char
类型的表示
构造方法:
File file = new File("D:/test.txt");
File file = new File("test.txt");//当直接写文件名的话,该父目录为null
方法(部分):
如果创建文件时,在该目录下有一个同名同类型文件,那么将不会创建。
文件重命名操作也可以移动文件位置。
InputStream:InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream。
修饰符及返回值类型 方法签名 说明
int read() 读取一个字节的数据,返回 -1 代表已经完全读完了
int read(byte[] b) 最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表以及读完了
int read(byte[] b, int off, int len) 最多读取 len - off 字节的数据到
b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
void close() 关闭字节流
为了保证close()方法一定运行,可以写到finally{}里面,也可将对象的创建写在try()里面。
当read()方法没读完时,返回的是读取数据的ascii码。
try (FileInputStream fileInputStream1 = new FileInputStream("d:/text.txt"); FileOutputStream fileOutputStream2 = new FileOutputStream("c:/text.txt")){}
FileInputStream fileInputStream = new FileInputStream(file); int a = fileInputStream.read();
对字符类型直接使用
InputStream
进行读取是非常麻烦且困难的,所以,我们使用一种我们之前比较熟悉的类来完成该工作,就是 Scanner
类。
构造方法 说明
Scanner(InputStream is, String charset) 使用 charset 字符集进行 is
的扫描读取
FileInputStream fileInputStream = new FileInputStream(file); Scanner scanner = new Scanner(fileInputStream, "UTF-8"); while (scanner.hasNext()){ System.out.println(scanner.next()); }
OutputStream:OutputStream 同样只是一个抽象类,要使用还需要具体的实现类。我们现在还是只关心写入文件中,所以使用 FileOutputStream,OutputStream类的使用与inputstream大致相同。OutputStream类对象打开文件,会清空原来文件中的内容,要想不清空原来文件的内容,则必须按照追加的方式打开。
FileOutputStream fileOutputStream = new FileOutputStream("d:/test.txt",true)
void flush() 重要:我们知道 I/O
的速度是很慢的,所以,大多的
OutputStream
为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域里,直到该区域满了或者其他指定条件时才真正将数据写入设备中,这个区域一般称为缓冲区。但造成一个结果,就是我们写的
数据,很可能会遗留一部分在缓冲区中。需要在最后或者合适的位置,调用 flush
(刷新)操作,将数据刷到设备中。这与inputstream的方法所不同。
fileOutputStream.write('d'); fileOutputStream.write('4'); fileOutputStream.flush();
与inputstream一样,一个一个输入过于麻烦,因此可以使用和scanner类类似的类
PrintWriter,
将OutputStream
处理下,使用PrintWriter 类来完成输出,
OutputStream output = new FileOutputStream("d:/test.txt"); OutputStreamWriter writer = new OutputStreamWriter(output, "utf8"); PrintWriter printWriter = new PrintWriter(writer); printWriter.print("hello");