IO中常用对象
1.字节流
1.1
FileOutputStream fos = new FileOutputStream(getFile());
FileInputStream fis = new FileInputStream(getFile());
1.2
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath + "b.gif"), 1024);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath + "a.gif"));
2.字符流
2.1
FileWriter fw = new FileWriter(getFile(), true);
FileReader fr = new FileReader(getFile());
2.2
BufferedWriter bw = new BufferedWriter(new FileWriter(getFile(), false), 1024);
BufferedReader br = new BufferedReader(new FileReader(getFile()), 1024);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(getFile())), 1024);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(getFile())));
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(getFile())));
3.转换流(字节转字符)
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(getFile()));
InputStreamReader reader = new InputStreamReader(new FileInputStream(getFile()));
4.Properties
File file = new File(getFile());
Properties p = new Properties();
p.load(new FileReader(file));
Object obj = p.get("count");
p.setProperty("count", String.valueOf(count));
p.store(new FileWriter(file), "说明");
5.File
6.打印流
PrintStream
PrintWriter
7.管道流
PipedInputStream
PipedOutputStream
8.RandomAccessFile
// 生成一个文件,文件第一行保存文件路径名及文件记录的行数,逗号分隔,第一行不包括在内
// 随机生成指定个数,如果是偶数就保存到文件中并记录个数,第行保存一个数
// 最后更新文件中记录的行数
public void createFile() {
String filePath = "e:/doc/data/abc.txt";
BufferedWriter writer = null;
int max = 10000;
int count = 0;
try {
writer = new BufferedWriter(new FileWriter(filePath));
writer.write(filePath);
writer.write(",00000000");
writer.newLine();
Random random = new Random();
int value = 0;
for (int i = 0; i < max; i++) {
value = random.nextInt(1000000);
if (value % 2 == 0) {
writer.write(String.valueOf(value));
writer.newLine();
count++;
}
if (count % 100 == 0) {
writer.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (count > 0) {
updateFile(filePath, count);
}
}
// 最后更新文件中记录的行数
private void updateFile(String filePath, int count) {
RandomAccessFile accessFile = null;
try {
accessFile = new RandomAccessFile(filePath, "rw");
accessFile.writeBytes(filePath);
accessFile.writeBytes(",");
accessFile.writeBytes(String.format("%08d", count));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (accessFile != null) {
try {
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//直接用RandomAccessFile生成文件并修改
public void createFile2() {
String filePath = "e:/doc/data/abc2.txt";
RandomAccessFile accessFile = null;
int max = 10000;
int count = 0;
try {
accessFile = new RandomAccessFile(filePath, "rw");
accessFile.writeBytes(filePath);
accessFile.writeBytes(",00000000\r\n");
Random random = new Random();
int value = 0;
for (int i = 0; i < max; i++) {
value = random.nextInt(1000000);
if (value % 2 == 0) {
accessFile.writeBytes(String.valueOf(value));
accessFile.writeBytes("\r\n");
count++;
}
}
accessFile.seek(0);
accessFile.writeBytes(filePath);
accessFile.writeBytes(",");
accessFile.writeBytes(String.format("%08d", count));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (accessFile != null) {
try {
accessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
其中
accessFile.seek(0);
accessFile.writeBytes(filePath);
accessFile.writeBytes(",");
accessFile.writeBytes(String.format("%08d", count));
可修改为
accessFile.seek(filePath.length() + 1);
accessFile.writeBytes(String.format("%08d", count));
或
accessFile.seek(0);
accessFile.skipBytes(filePath.length() + 1);
accessFile.writeBytes(String.format("%08d", count));
9.序列流
可以将多个读取流合并成一个流
SequenceInputStream
10.对象的序列化
ObjectInputStream
ObjectOutputStream
11.操作基本数据类型的流对象
DataInputStream
DataOutputStream
12.操作数组的流对象
12.1操作字节数组
ByteArrayInputStream
ByteArrayOutputStream
12.2操作字符数组
CharArrayReader
CharArrayWriter
13.编码转换
本机编码
System.getProperty("file.encoding");
常见码表:
ASCII
ISO8859-1
GB2312
GBK
unicode
UTF-8