Java的IO操作分为磁盘IO和内存流IO。
1、磁盘IO:FileInputStream和FileOutputStream
File file = new File("D:\\temp\\test.docx");
if (file.exists()) {
// 文件输入流
FileInputStream in = new FileInputStream(file);
// 文件输出流
FileOutputStream out = new FileOutputStream("D:\\temp\\testNew.docx");
byte[] bytes = new byte[1024];
int len =0;
while ((len = in.read(bytes)) >0) {
// 这里必须是0到len,否则可能会有文件损坏的问题
out.write(bytes, 0, len);
}
// 磁盘IO需要关闭流
in.close();
out.close();
}
2、内存流IO:ByteArrayInputStream和ByteArrayOutputStream
// 数据源
String str ="abc";
byte[] testByte = str.getBytes();
// 输入流
ByteArrayInputStream in = new ByteArrayInputStream(testByte);
// 输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
int ch =0;
while ((ch = in.read()) != -1) {
out.write(ch);
}
// 内存流不需要关闭IO,不用后Java的垃圾回收机制会将它回收,而且其close()方法体为空,就算调用了close()也是什么事都不会做。
3、byte数组和上面互转:
(1)FileInputStream转为byte[]
FileInputStreamin =new FileInputStream(file);
if (in.available() !=0) {
byte[] bytes =new byte[in.available()];
in.read(bytes);
}
(2)ByteArrayInputStream转为byte[]
(3)byte[]转为FileInputStream
(4)byte[]转为ByteArrayInputStream
byte[] byt =new byte[1024];
ByteArrayInputStream input =new ByteArrayInputStream(byt);