文件流
在实现了画图板的重绘之后,下一步就是要将数据储存在硬盘之中。所谓stream(流),就是输入与输出。按照方向,分为输入inputstream和outputstream。
其中主要有:
基础字节流:每次读写一个字节:InputStream,OutputStream。
缓冲流:BufferedInputStream ,BufferedOutputStream。
从流中读取指定的数据类型的数据:DataInputStream,DataInputStream。
下面,主要来详解基础字节流:每次读写一个字节:InputStream,OutputStream。 缓冲流:BufferedInputStream ,BufferedOutputStream。
1::每次读写一个字节:InputStream,OutputStream。代码如下import java.io.*;
public class Fuzhi {
public static void main(String args[]) {
// 原文件的路径
String path1 = "D:\\aa\\s.txt";
// 复制文件的路径
String path2 = "D:\\aa\\r.txt";
Fuzhi fuzhi = new Fuzhi();
// 读取数据
byte[] xr = fuzhi.read(path1);
// 写数据
fuzhi.write(path2, xr);
System.out.println("复制");
}
/**
* 读取文件 复制 path 路径 return 读取到的字符
*
* @param path1
*/
public byte[] read(String path) {
try {
// 根据文件的路径构造输入流,路径是papathth1
java.io.FileInputStream input = new java.io.FileInputStream(path);
// 得到管道中字节数
int int1 = input.available();
// 定义数组保存
byte byte1[] = new byte[int1];
int t = input.read();
int i = 0;
while (t != -1) {
// 将读取字节放入数组
byte1[i] = (byte) t;
// 读取下一个数组
t = input.read();
i++;
}
input.close();
return byte1;
} catch (Exception ef) {
ef.printStackTrace();
}
return null;
}
/**
* 黏贴 xr 写入的数据
*/
public void write(String path, byte[] byte1) {
try {
// 文件输出流
java.io.FileOutputStream output = new java.io.FileOutputStream(path);
for (int i = 0; i < byte1.length; i++) {
// 写字节
output.write(byte1[i]);
}
// 强制输出
output.flush();
// 关闭
output.close();
} catch (Exception ef) {
ef.printStackTrace();
}
}
}
这里不难看出,用一个一个字节来读取,方法十分繁杂。
下面用的是缓冲流来读取~相比起字节流 要方便的多
import java.io.*;
public class Jiami {
public static void main(String args[]) {
// 读取源文件
String Source = "D:\\aa\\aaa.txt";
// 复制后文件
String Back = "src\\cc.txt";
Jiami jiami = new Jiami();
boolean result = jiami.Copy(Source, Back);
System.out.print("复制结果" + result);
}
public boolean Copy(String Source, String Back) {
File s = new File(Source);
File b = new File(Back);
try {
// 创建输出流
java.io.FileInputStream input1 = new java.io.FileInputStream(s);
// 构造输入缓冲流
java.io.BufferedInputStream input2 = new java.io.BufferedInputStream(input1);
// 输出的
java.io.FileOutputStream output1 = new java.io.FileOutputStream(b);
java.io.BufferedOutputStream output2 = new java.io.BufferedOutputStream(output1);
// int t = input2.read();
// while (t != 1) {
// output2.write(t);
t = input2.read();
// }
int i = 0;
// 输入流中读
while ((i = input2.read()) != -1) {
System.out.println("i=" + i);
// 写到缓冲中输出
output2.write(i);
}
// 清空输出流的缓存并且关闭
output2.flush();
output2.close();
// // 关掉input1
// input1.close();
} catch (Exception ef) {
ef.printStackTrace();
}
return true;
}
}
这里要记得 需要关闭的是缓冲流 input2~而不是输出流~不然就会导致无数据的输出。
其次,在运用到文件的输出与输入时,一定要记得最后的清空和关闭。