当前位置: 代码迷 >> J2SE >> 施用字节流拷贝图片:原始数据格式无法识别
  详细解决方案

施用字节流拷贝图片:原始数据格式无法识别

热度:3265   发布时间:2013-02-25 00:00:00.0
使用字节流拷贝图片:原始数据格式无法识别
Java code
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class CopyImageDemo {    public static void main(String[] args) {        FileInputStream fis = null;        FileOutputStream fos = null;        try {            fis = new FileInputStream("c:/a.jpg");            fos = new FileOutputStream("c:/b.jpg");            try {                System.out.println("文件大小:" + fis.available() + "Byte");                byte buf[] = new byte[fis.available()];                int len = 0;                while ((len = fis.read(buf)) != -1) {                    fos.write(len);                    fos.flush();                                    }            } catch (IOException e) {                e.printStackTrace();            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } finally {            try {                if (fis != null) {                    fis.close();                }                if (fos != null) {                    fos.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}


代码如上。
为啥是这样的结果呢~谢谢~

------解决方案--------------------------------------------------------
fos.write(len);
改成
fos.write(buf, 0, len);

不过不建议1次把文件全读了输出。
万一文件很大,会出错的。

类似这样。
Java code
            // 新建文件输入流并对它进行缓冲            inBuff = new BufferedInputStream(new FileInputStream(sourceFile));            // 新建文件输出流并对它进行缓冲            outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));            // 缓冲数组            byte[] b = new byte[1024 * 5];            int len;            while ((len = inBuff.read(b)) != -1) {                outBuff.write(b, 0, len);            }            // 刷新此缓冲的输出流            outBuff.flush();
------解决方案--------------------------------------------------------
建议:
用BufferedInputStream包装FileInputStream
用BufferedOutputStream包装FileOutputStream
flush方法写在while循环的外面