认识File 类和InputStream, OutputStream

        Java中通过file类来对一个文件(包括目录)进行抽象的描述。并且有File类对象,并不代表真实存在该文件。认识File类,就先了解File类的属性,构造方法,方法。

属性:

修饰符及类型         属性                         说明
static String         pathSeparator          依赖于系统的路径分隔符,String 类型的表示
static char            pathSeparator          依赖于系统的路径分隔符,char 类型的表示
构造方法:
认识File 类和InputStream, OutputStream_第1张图片
File file = new File("D:/test.txt");
File file = new File("test.txt");//当直接写文件名的话,该父目录为null

方法(部分):

认识File 类和InputStream, OutputStream_第2张图片

如果创建文件时,在该目录下有一个同名同类型文件,那么将不会创建。

文件重命名操作也可以移动文件位置。

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")){}
认识File 类和InputStream, OutputStream_第3张图片
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");

你可能感兴趣的:(java,开发语言)