在安卓设备上,把文件读出成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(); } } } }
记录一下