节点流
文件节点流
FileInputStream和FileOutputStream是文件字节流,是一种节点流
文件字节输入流的构造方法:
FileInputStream("文件名称"),如果文件不存在则FileNotFoundException
FileInputStream(File)
文件字节输出流的构造方法:
FileOutputStream(“文件名称”) 如果文件不存在则新建文件,如果文件存在则覆盖文件内容
FileOutputStream(String name文件名称, boolean append是否采用追加方式)
FileReader和FileWriter类似
FileInputStream和FileOutputStream两个类属于结点流,第一个类的源端和第二个类的目的端都是磁 盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。
如:
FileInputStream infile = new FileInputStream("myfile.dat");
FileOutputStream outfile = new FileOutputStream("results.dat");
要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时, 如输出文件已存在,则必须是可覆盖的。
要求:将d盘上的TestFile.java拷贝到e盘,并命名为dd.txt
try (InputStream is = new FileInputStream("d:/TestFile.java");
OutputStream os=new FileOutputStream("e:\\dd.txt");
) {
byte[] buffer=new byte[8192];
int len=is.read(buffer);
while(len>0){
os.write(buffer,0,len);
len=is.read(buffer);
}
}catch(IOException e){
e.printStackTrace();
}
//构造输出文件流时可以使用两种不同的方式
OutputStream os=new FileOutputStream("e:\\dd.txt"); //如果文件不存在则自动创建;如
//果文件存在则进行覆盖
OutputStream os=new FileOutputStream("e:\\dd.txt",true);//这里的boolean类型参数
//表示是否采用追加的方式写入文件
内存数组节点
如果文本则使用char[],如果二进制则使用byte[]
构造器方法
- CharArrayReader(char[] buf)其中char[]就是数据的来源,也就是说Reader就是从char[]中读取数 据
- CharArrayRead(char[] buf, int offset, int length)
CharArrayWriter用于实现向一个字符数组中写入数据,这个数组可以自动调整大小
ByteArrayInputStream、ByteArrayOutputStream和CharArrayReader以及CharArrayWriter类似,支 持操作的内容不同而已,操作byte[]与char[]
内存字串流
StringReader用于从一个字串String中读取数据
String str="亚洲说:‘我爱小黑’";
StringReader sr=new StringReader(str);
int cc;
while((cc=sr.read())!=-1)
System.out.print((char)cc);
sr.close();
StringWriter用于给一个StringBuffer中写入数据,实现一个可边长的字串
Scanner sc=new Scanner(System.in);
try(
StringWriter sw=new StringWriter();
Writer fw=new FileWriter("c:/console.txt")
){
String temp=sc.nextLine();
while(!temp.equals("quit")){
if(temp!=null && temp.trim().length()>0)
sw.write(temp+"\n");
temp=sc.nextLine();
}
fw.write(sw.toString());
}
总结
- 读写文件使用节点流FileInputStream/FileOutputStream和FileReader/FileWriter,如果操作文本 文件,建议使用FileReader/FileWriter,如果操作二进制文件建议使用 FileInputStream/FileOutputStream
- 需要建立缓冲区(建立临时文件的方式效率低),可以考虑使用内存节点,例如 CharArrayReader/CharArrayWriter、StringReader/StringWriter和 ByteArrayInputStream/ByteArrayOutputStream
- 如果需要一个二进制缓冲区可以使用ByteArrayInputStream/ByteArrayOutputStream,如果需要 一个字符缓存可以使用CharArrayReader/CharArrayWriter、StringReader/StringWriter
- 如果数据量不是特别大使用CharArrayReader/CharArrayWriter更为方便,如果数据量大而且可能 需要直接操作缓冲区则使用StringReader/StringWriter
- StringWriter中提供了方法getBuffer():StringBuffer