Java输入输出
File类代表java.io包下操作文件或者目录的类。
File类的list方法中可以接受一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。
JavaIO流
流的分类:
按照输入与输出分类: 输入流和输出流:
- InputStream && Reader 作为输入流的基类
- OutputStream && Writer 作为输出流的基类
他们都是一些抽象基类,无法直接创建对象。
还可以分成字节流和字符流
- InputStream && OutputStream 是字节流
- Reader && Writer 是字符流
字节流和字符流
InputStream && Reader 都代表输入流,只不过前者是字节输入流后者是字符输入流。两者提供的方法都很类似:
InputStream提供的方法:
- int read() 读取一个字节,并返回该字节
- int read(byte[] b) 读取b.length个字节放在b中,返回实际读取的字节数
- int read(byte[] b, int off, int len) 读取len长度的数据放入以off开头的b数组中。返回实际读取的字节数。
Reader提供的方法:
- int read() 读取一个字符,并返回该字符
- int read(char[] buff) 同上
- int read(char[] buff, int off, int len) 同上
由于InputStream && Reader都是字节流,是抽象基类,不能创建实例,但是其对对应的FileInputStream 和 FileReader都是操作文件的。
OutputStream && Writer 同上:
- void write(int c)
- void write(byte[]/char[] buff)
- void write(byte[]/char[] buff, int off, int len)
在使用输入输出流的时候不要忘记关闭流。
节点流在处理流的时候比较麻烦,一般都是使用包装流将节点流包装成处理流,这样就可以方便的使用。比如使用PrintStream来包装OutputStream。
FileOutputStream fos = new FileOutputStream("test.txt");
PrintStream ps = new PrintStream(fos);
ps.println("hello this is a test");
在最后关闭流的时候,首先应该关闭处理流,然后再关闭节点流。
因此进行输入输出的内容是文本内容,则应该考虑使用字符流,如果进行输入输出的内容是二进制内容,则应该考虑的是使用字节流。
同时java还提供了两个转换流,将字节流转换成字符流,InputStreamReader 将字节输入流转换成字符输入流,OutputStreamWriter将字节输出流转成字符输出流。
RandomAccessFile它支持随机访问,它可以跳转到程序的任意位置进行读写。因此可以在文件的末尾追加文件内容。
long getFilePointer() 返回文件记录指针的当前位置 void seek(long pos)将文件记录指针定位到pos位置。
网友评论