在安卓设备上,把文件读出成String,在写回去,文件大小不对了,打开显示乱码了。指定一下编码格式就解决了。代码如下:
private static final String destPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
private static final String srcPath = destPath+File.separator+"bg_device_detail_nvr.jpg";
public static final String receivePath = destPath+File.separator+"nvr.jpg";
private void testFile(){
getPermission();
BufferedInputStream bis = null;
ByteArrayOutputStream baos = null;
BufferedOutputStream bos = null;
ByteArrayInputStream bais = null;
try {
if (!new File(srcPath).exists()){
Toast.makeText(this,"文件不存在!",Toast.LENGTH_SHORT).show();
return;
}
bis = new BufferedInputStream(new FileInputStream(srcPath));
baos = new ByteArrayOutputStream();
bos = new BufferedOutputStream(new FileOutputStream(receivePath));
byte[] buffer = new byte[1024];
int len = -1;
while ((len = bis.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
byte[] bb= baos.toByteArray();
String temp = new String(bb, StandardCharsets.ISO_8859_1); //指定编码后就解决乱码问题了
byte[] result = temp.getBytes(StandardCharsets.ISO_8859_1);
bos.write(result, 0, result.length);
Toast.makeText(this,"完成", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (null != baos) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (null != bis) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (null != bais){
bais.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (null != bos){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
记录一下