标签:tac 否则 lin head 程序 parent 创建 重命名文件 有序
流是一组有序的数据序列,可分为输入流和输出流两种。I/O流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。不仅可以使用在文件上,也可以用于键盘、鼠标、显示器等。
输入流
文件--->数据流--->目的地
输出流
源-->数据流--->文件
Java定义了许多类专门复杂各种方式的输入/输出。这些类都放在java.io包中。其中,输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流都是OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
InputStream类是字节输入流的抽象类,是所有字节输入流的父类。InputStream类的具体层次结构。
该类中所有方法遇到错误时都会触发IOException异常。
Java中的字符时Unicode编码,是双字节的。InputStream是用来处理字节的,并不适合处理字符文本。Java为字符文本的输入提供了一套单独的类Reader。
OutputStream类是字节输出流的抽象类。
OutputStream类中的所有方法均返回void,遇到错误时都会触发IOException异常。
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。
File类是java.io包中唯一代表磁盘文件本身的对象。File类定义了一些与平台物馆的方法来操作文件,可以实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如所在目录,文件的长度,以及文件读写权限等。
使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象。
// 1.File(String pathName)
New File(String pathName)
File file = new File("D:\\a.txt");
// 2.File(String parent, String child)
// 该构造方法根据定义的父路径和子路径字符串创建一个新的File对象。
new File(String parent, String child);
String parent = "D:/doc";
String child = "letter.txt";
// 3.File(File f,String child)
// 该构造方法根据parent抽象路径名和子路径字符串创建一个新的File实例
String f = "D:/doc/";
String child = "letter.txt";
public static class {
public static void main(String[] args) {
File file = new File("test.txt");
if(file.exits()) {
file.delete();
}else{
try{
file.createNewFile();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
两个类都是用来操作磁盘文件的,该类继承自InputStream,提供了基本的文件写入能力。
FileInputStream类常用构造方法
- FileInputStream(String name);
- FileInputStream(File file); 该方法允许把文件连接输入流之前对文件做进一步操作。
public static class {
public static void main(String[] args) {
File file = new File("test.txt");
try{
// 创建FileOutputStream对象
FileOutputStream out = new FileOutputStream(File);
byte byt[] = "两个类都是用来操作磁盘文件的,该类继承自InputStream,提供了基本的文件写入能力。".getBytes();
out.write(byt);
out.close();
}catch(Exception e){
e.printStackTrace();
}
try{
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024];
int len = in.read(byt);
// 将文件信息输出,但是这个输出new String有问题
System.out.println(new String(byt,0,len));
in.close()
}catch(Exception e){
e.printStackTrace();
}
}
}
汉字采取上面的字节流读入会产生乱码的问题,所以使用字符流的FileReader和FileWriter类,即可避免该现象。
缓存是I/O的一种性能优化,缓存流为I/O流增加了内存缓冲区,有了缓存,使得在流上执行skip(),mark(),和reset()方法成为可能。
BufferedInputStream构造方法
第一种形式的构造方法创建了一个带有32字节的缓存流;第二个按照指定的大小来创建最优的缓存区大小。
BufferedOutputStream构造方法
以上分别继承了Reader和Writer类
BufferedReader类的常用方法
方法 | 描述 |
---|---|
read() | 读取单个字符 |
readLine() | 读取一个文本行,并将其返回为一个字符串。若无数据,则返回null。 |
BufferedWriter常用方法
方法 | 描述 |
---|---|
write(String s,int off,int len) | 写入字符串的某一部分 |
flush() | 刷新该流的缓存 |
newLine() | 写入一个行分割符 |
在使用BufferedWriter类的Write()方法时,数据并没有立刻被写入值输出流,而是首先进入缓存去中。如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。
字符数据--> BufferedWriter--> OutputStreamWriter-->OutputStream --> 文件
package simple.java;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import sun.net.www.content.text.plain;
public class FileTest {
public static void main(String[] args) throws IOException {
String[] array = {"取等","学家尽快","断努力"};
File f = new File("C:\\pox.txt");
try{
FileWriter fileWriter = new FileWriter(f);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
for (int i=0;i<array.length;i++){
bufferedWriter.write(array[i]);
bufferedWriter.newLine();
}
bufferedWriter.close();
fileWriter.close();
}catch(Exception e){
e.printStackTrace();
}
try{
FileReader fileReader = new FileReader(f);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String s = null;
int i = 0;
// s=bufferedReader.readLine()很重要,否则会显示不全,还不知道为啥。
while((s=bufferedReader.readLine())!= null) {
i++;
System.out.println("第"+i+"行:"+s);
}
bufferedReader.close();
fileReader.close();
}
标签:tac 否则 lin head 程序 parent 创建 重命名文件 有序
原文地址:https://www.cnblogs.com/hasz/p/13040840.html