缓冲输入文件
import java.io.*;
/**
* BufferedInputFile
*/
public class BufferedInputFile {
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{
System.out.println(read("/Users/dylan/Desktop/in.txt"));// 这里填充文件的String或者File对象就可以
}
}
从内存输入
注意read()是以int形式返回下一子节,所以必须要类型转换为char才能正确打印
(感觉这个跟上一个相比功能没什么区别鸭)
import java.io.*;
/**
* MemoryInput
*/
public class MemoryInput {
public static void main(String[] args) throws IOException{
//这里是先转化为string,然后再用stringReader去读取
//注意这里的BufferedInputFile是上一个程序中的..
StringReader in = new StringReader(BufferedInputFile.read("/Users/dylan/Desktop/in.txt"));
int c;
while ((c = in.read()) != -1) {
System.out.print((char)c);
}
}
}
格式化的内存输入
DataInputStream是一个面向字节的IO类,所以必须要使用InputStream而不是Reader
ByteArrayInputStream的参数必须是字节数组,所以在BufferedInputFile.read把它转换为String之后,string.getBytes就把String转化为了字节数组
(有点不太理解这个格式化的意思)
//方法一: 先转化为String
import java.io.*;
/**
* FormattedMemoryInput
*/
public class FormattedMemoryInput {
public static void main(String[] args) {
try {
//in.txt --BufferedInputFile-> String ---->ByteArrayInputStream --> DataInputStream
DataInputStream in = new DataInputStream(new ByteArrayInputStream(BufferedInputFile.read("/Users/dylan/Desktop/in.txt" ).getBytes()));
while (true) {
System.out.print((char)in.readByte());
}
} catch (EOFException e) {
System.err.println("end of stream");
}catch(IOException e){
e.printStackTrace();
}
}
}
//方法二,直接使用FileInputStream,但是这个不好判断是否到达文件末尾,可以使用available
//但是available要谨慎使用
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* TestEOF
*/
public class TestEOF {
public static void main(String[] args) throws IOException{
DataInputStream in = new DataInputStream(new FileInputStream("/Users/dylan/Desktop/in.txt"));
while(in.available() != 0){
System.out.print((char)in.readByte());
}
in.close();
}
}
基本的文件输出
//: io/BasicFileOutput.java
import java.io.*;
public class BasicFileOutput {
static String file = "BasicFileOutput.out";
public static void main(String[] args)
throws IOException {
BufferedReader in = new BufferedReader(new StringReader(BufferedInputFile.read("BasicFileOutput.java")));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
int lineCount = 1;
String s;
while((s = in.readLine()) != null )
out.println(lineCount++ + ": " + s);
out.close();
// Show the stored file:
System.out.println(BufferedInputFile.read(file));
}
} /* (Execute to see output) *///:~
简单的方法:
//: io/FileOutputShortcut.java
import java.io.*;
public class FileOutputShortcut {
static String file = "FileOutputShortcut.out";
public static void main(String[] args)
throws IOException {
BufferedReader in = new BufferedReader(
new StringReader(
BufferedInputFile.read("FileOutputShortcut.java")));
// ********Here's the shortcut:**********
PrintWriter out = new PrintWriter(file);
int lineCount = 1;
String s;
while((s = in.readLine()) != null )
out.println(lineCount++ + ": " + s);
out.close();
// Show the stored file:
System.out.println(BufferedInputFile.read(file));
}
} /* (Execute to see output) *///:~
存储和恢复数据
读取随机访问文件