我的博客——Java文件操作系列
【Java文件操作(五)】从txt文件中读取字符串、乱码原因
【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\FileOutputStream等辨析
功能
借助内存复制图片,读文件和写文件的结合。使用了:
ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream
- 两个步骤:
- (硬盘中)图片 -> (内存中)字节数组
- (内存中)字节数组 -> (硬盘中)图片
总结&易错点:
-
对于文件File来说:
-
写出到File用
FileOutputStream
,从File读取用FileInputStream
-
对于字节数组ByteArray来说:
-
写出到ByteArray用
ByteArrayOutputStream
,从ByteArray读取用ByteArrayInputStream
代码
package cn.hanquan.test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/* --------------------借助内存复制图片--------------------
*
* 两个步骤:
* (硬盘中)图片 -> (内存中)字节数组
* (内存中)字节数组 -> (硬盘中)图片
*
* 总结&易错点:
* 对于文件File来说,写出到File用FileOutputStream,从File读取用FileInputStream
* 对于字节数组ByteArray来说,写出到ByteArray用ByteArrayOutputStream,从ByteArray读取用ByteArrayInputStream
*/
public class FileOutputStreamTest {
public static String fromSRC = "C:\\Users\\Bug\\Desktop\\College Files\\壁纸\\666.jpg";
public static String toSRC = "C:\\Users\\Bug\\Desktop\\test.jpg";
public static void main(String[] args) throws IOException {
byte[] datas;
datas = fileToByteArray(fromSRC);
byteArrayToFile(toSRC, datas);
}
// (硬盘中)图片 -> (内存中)字节数组
public static byte[] fileToByteArray(String filePath) throws IOException {
// 创建源与目的地
File fromfile = new File(fromSRC);
// 选择流
FileInputStream instream = new FileInputStream(fromfile);
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
// 操作
byte[] flush = new byte[1024 * 10];
int len = -1;
while ((len = instream.read(flush)) != -1) {
outstream.write(flush, 0, len);
}
// 关闭流
outstream.flush();
instream.close();
return outstream.toByteArray();
}
// (内存中)字节数组 -> (硬盘中)图片
public static void byteArrayToFile(String filePath, byte[] bytearray) throws IOException {
// 创建源
File tofile = new File(filePath);
// 选择流
ByteArrayInputStream instream = new ByteArrayInputStream(bytearray);
FileOutputStream outstream = new FileOutputStream(tofile);
// 操作
byte[] flush = new byte[1024 * 10];
int len = -1;
while ((len = instream.read(flush)) != -1) {
outstream.write(flush, 0, len);
}
// 关闭流
outstream.close();
}
}