目录
缓存输入文件
读取文件内容:
package StreamDemo;
import java.io.BufferedReader;
import java.io.*;
public class BufferedInputDemo {
public static String read(String filename)throws IOException {
BufferedReader in=new BufferedReader(new FileReader(filename));
String s;
StringBuilder sb = new StringBuilder();
while ((s=in.readLine())!=null){
sb.append(s+"\n");//读取每一行文件
}
in.close();
return sb.toString();
}
public static void main(String[] args) throws IOException {
//using test.txt
/**
* 这里写绝对路径
*/
System.out.println(read("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test.txt"));
}
}
test.txt文件内容:
Google
Tencent
Baidu
IBM
Intel
Huawei
内存输入
使用上文所使用BufferedInputDemo类,每次读取一个字符,打印到控制台:
package StreamDemo;
import java.io.*;
public class MemoryInDemo {
//using test.txt
public static void main(String[] args) throws IOException {
StringReader reader = new StringReader(BufferedInputDemo.read("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test.txt"));
int c;
while ((c = reader.read()) != -1) {
System.out.print((char)c+" ");//read()以int形式返回下一字节,必须转化为(char)
}
}
}
Output:
G o o g l e
T e n c e n t
B a i d u
I B M
I n t e l
H u a w e i
格式化内存输入
使用BufferedInputDemo类
格式化数据,一般使用面向字节的DataInputStream类,必须使用InputStream类而不是Reader类(它是面向字符流的)。
package StreamDemo;
import java.io.*;
public class FormattedMemoryInput {
public static void main(String[] args)throws IOException {
//using test.txt
try {
DataInputStream dis=new DataInputStream(
new ByteArrayInputStream(
BufferedInputDemo.read("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test.txt").getBytes()));
while (true) {
System.out.print((char) dis.readByte());
}
} catch (EOFException e) {
System.out.println("数据流末尾");
}
}
}
必须为ByteArrayInputStream提供字节数组,为了产生该数组String包含一个可以实现此项工作的getBytes()方法。数据一层一层传递:
Output:
Google
Tencent
Baidu
IBM
Intel
Huawei
数据流末尾
DataInputStream的readByte()方法一个一个字节地读取字符,任何字节的值都是合法结果,返回值不能用来检测输入是否结束,我们可以用available()方法查看还有多少可供存取的字符。
package StreamDemo;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class TestEOF {
public static void main(String[] args)
throws IOException {
//using test.txt
DataInputStream in=new DataInputStream(
new BufferedInputStream(
new FileInputStream("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test.txt")
)
);
while (in.available()!=0){
System.out.print((char) in.readByte());
}
}
}
Output结果同上。
基本文件输出
新建一个test1.txt文件
使用上文中BufferedInputDemo 类的read()方法,把文件变成字符串
package StreamDemo;
import java.io.*;
public class FileOutput {
public static void main(String[] args)
throws IOException {
//using test.txt test1.txt
BufferedReader in=new BufferedReader(
new StringReader(
BufferedInputDemo.read("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test.txt")
)
);//输入文件流
PrintWriter out = new PrintWriter(
new BufferedWriter(new FileWriter("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test1.txt"))
);//输出文件流
int lineCnt = 1;//行号
String s;
while ((s = in.readLine()) != null) {
out.println(lineCnt++ +":"+s);
}
out.close();
System.out.println("---------------");
System.out.println(BufferedInputDemo.read("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\test1.txt "));
}
}
常用BufferedWriter包装起来用以缓存输出。
一旦读完数据流,readLine()返回空,需要管不out输出流,如果不关闭,就会发现缓存区内容不会刷新情况,内容就会不完整。
Output:
---------------
1:Google
2:Tencent
3:Baidu
4:IBM
5:Intel
6:Huawei
存储与恢复数据
新建Data.txt文件
package StreamDemo;
import java.io.*;
public class SavingAndRecovering {
/**using Data.txt
* DataOutputStream写入数据,DataInputStream恢复数据
* 且都面向字节
*
*/
public static void main(String[] args) throws IOException {
DataOutputStream out=new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\Data.txt")//文件路径
)
);
out.writeUTF("Google is an Internet company");//写入数据
out.writeInt(90000);
out.writeUTF("employees");
out.close();
DataInputStream in=new DataInputStream(
new BufferedInputStream(
new FileInputStream("C:\\MySpace\\MyCode\\IdeaCode\\IO\\src\\StreamDemo\\Data.txt")
)
);
System.out.println(in.readUTF());//一次读取一行
System.out.println(in.readInt());
System.out.println(in.readUTF());
}
}
Output:
Google is an Internet company
90000
employees