package com.dirlist;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedInputFile {
//缓冲输入文件
public static String read(String filename) throws IOException{
//BufferedReader从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
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 {
System.out.println(read("src/com/dirlist/BufferedInputFile.java"));
}
}
package com.dirlist;
import java.io.IOException;
import java.io.StringReader;
public class MemoryInput {
/**
* 从内存输入
*/
public static void main(String[] args) throws IOException {
//StringReader其源为一个字符串的字符流
StringReader in=new StringReader(BufferedInputFile.read("src/com/dirlist/BufferedInputFile.java"));
int c;
while((c=in.read())!=-1){
System.out.print((char)c);
}
}
}
package com.dirlist;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class FormattedMemoryInput {
/**
*格式化的内存输入
*/
public static void main(String[] args) {
try {
//DataInputStream数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。
//ByteArrayInputStream 包含一个内部缓冲区,该缓冲区存储从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
DataInputStream in=new DataInputStream(new ByteArrayInputStream(BufferedInputFile.read("src/com/dirlist/FormattedMemoryInput.java").getBytes()));
while(true){
System.out.print((char)in.readByte());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.dirlist;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class TestEOF {
/**
*格式化的内存输入
*/
public static void main(String[] args) {
try {
//DataInputStream数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。
//ByteArrayInputStream 包含一个内部缓冲区,该缓冲区存储从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
DataInputStream in=new DataInputStream(new ByteArrayInputStream(BufferedInputFile.read("src/com/dirlist/FormattedMemoryInput.java").getBytes()));
//available()返回可不发生阻塞地从此输入流读取的字节数。返回值是 count - pos,它是要从输入缓冲区中读取的剩余字节数。
while(in.available()!=0){
System.out.print((char)in.readByte());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.dirlist;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
public class BasicFileOutput {
static String filename="BasicFileOutput.out";
public static void main(String[] args) throws IOException {
BufferedReader in=new BufferedReader(new StringReader(BufferedInputFile.read("src/com/dirlist/FormattedMemoryInput.java")));
//BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
//PrintWriter向文本输出流打印对象的格式化表示形式
PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter(filename)));
int lineCount=1;
String s;
while((s=in.readLine())!=null){
pw.println(lineCount+++": "+s);
}
pw.close();
System.out.println(BufferedInputFile.read(filename));
}
}