黑马程序员技术交流社区

标题: 字节流拷贝非文本数据出现编码问题 [打印本页]

作者: 黄晶    时间: 2012-12-4 20:52
标题: 字节流拷贝非文本数据出现编码问题
本帖最后由 黄晶 于 2012-12-4 20:53 编辑

利用字节流(FileInputStream,FileOutputStream)对象实现拷贝非文本数据时,
在命令行下面编译总是报错,截图如下:

具体是实现一张图片的拷贝....
也试过javac -encoding OOO XXX.java 命令.始终无法编译通过.
最后,将源代码粘贴到MyEclipse中运行,居然可以.实现了图片的拷贝..
我有个疑问..
JDK的配置环境没有问题,控制台和MyEclipse编译运行都需要JDK,
为啥此时命令行咋不能编译了呢????



下面是源码:

/*
通过字节流拷贝图片
*/

import java.io.*;

public class CopyPic
{
         public static void main(String[] args)
         {
                 FileInputStream fis = null;
                 FileOutputStream fos = null;
                 
                 try
                 {
                         fis = new FileInputStream("g:\\charError.png");//存于本地主机上的图片
                         fos = new FileOutputStream("g:\\charError_copy.png");

                         byte[] buf = new byte[1024];
                        
                         int len = 0;
                        
                         while((len = fis.read(buf)) != -1)
                         {
                                 fos.write(buf, 0 , len);
                         }
                 }
                 catch(IOException e)
                 {
                         System.out.println("error");
                 }
                 finally
                 {
                         try
                         {
                                 if(fis != null)
                                 {
                                         fis.close();
                                 }
                         }
                         catch(IOException e)
                         {
                                 System.out.println("error");
                         }
                        
                         try
                         {
                                 if(fos != null)
                                 {
                                         fos.close();
                                 }
                         }
                         catch(IOException e)
                         {
                                 System.out.println("error");
                         }
                 }
         }
}

作者: 尘世    时间: 2012-12-4 20:59
混个分数下载东西!!
作者: 魏秀盛    时间: 2012-12-5 10:43
应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java
你编译的时候指定encoding的编码为UTF-8试试。
作者: 高会仁    时间: 2012-12-5 11:26
你把你的那个CopyPic.java用记事本打开然后另存为,此时选择编码,举个例子如图,保存完毕后,再试下,应该不会有问题
MyEclipse因为是高级编辑器,这些问题它帮你内部处理好了。

未命名.jpg (50.94 KB, 下载次数: 47)

未命名.jpg

作者: 黄晶    时间: 2012-12-5 13:11
魏秀盛 发表于 2012-12-5 10:43
应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java
你编译的时候指定encoding的编码为UTF ...

还是有问题,继续报错
这是截图:

还是谢谢你...{:soso_e100:}
作者: 黄晶    时间: 2012-12-5 13:17
高会仁 发表于 2012-12-5 11:26
你把你的那个CopyPic.java用记事本打开然后另存为,此时选择编码,举个例子如图,保存完毕后,再试下,应该 ...

哎,还是不行,仍然报相同的错误........抓狂了..好吧,,以后编码就到Myeclipse上吧......
我怀疑是不是要重装个系统了....{:3_55:}
还是谢谢你了....:)
作者: 魏秀盛    时间: 2012-12-5 15:59
黄晶 发表于 2012-12-5 13:11
还是有问题,继续报错
这是截图:

我知道你问题的症结了,刚才在本机实验了下,下面截个图给你看看吧:
你应该是保存这个CopyPic.java的时候在编码那里选择了可能不是ANSI的编码

如果你保存的编码时UTF-8的话那么用javac -encoding UTF-8 CopyPic.java编译的时候就不会报错。

再看正常保存的时候编码的形式如下图:

在这种情况下你保存完成用javac CopyPic.java编译就不会你问题中提到的错误。
PS:我的JDK是GBK编码的。


作者: 黄晶    时间: 2012-12-5 16:48
魏秀盛 发表于 2012-12-5 15:59
我知道你问题的症结了,刚才在本机实验了下,下面截个图给你看看吧:
你应该是保存这个CopyPic.java的时 ...

soga....我把编码格式保存为ANSI就通过了...直接使用javac没有指定encoding..


但是保存的编码是UTF-8的话那么用javac -encoding UTF-8 CopyPic.java编译的时候还是会报错..


我的JDK也是GBK的......
{:soso_e194:}这个编码格式问题真是挠死人了.............
作者: 魏秀盛    时间: 2012-12-5 17:19
黄晶 发表于 2012-12-5 16:48
soga....我把编码格式保存为ANSI就通过了...直接使用javac没有指定encoding..

这次已经不是字符编码错误了,你截图中显示可能是你类中写错了,方便把代码文件贴出来吗?
作者: 黄晶    时间: 2012-12-5 17:37
魏秀盛 发表于 2012-12-5 17:19
这次已经不是字符编码错误了,你截图中显示可能是你类中写错了,方便把代码文件贴出来吗? ...

源代码就在顶楼下面附着.....
作者: 魏秀盛    时间: 2012-12-5 17:56
黄晶 发表于 2012-12-5 17:37
源代码就在顶楼下面附着.....

我拷贝你的代码到EditPlus中保存的时候用的UTF-8编码的,编译运行也通过了,成功实现了图片的拷贝操作,不知道你的是什么原因引起的,我把我代码贴给你看看呗
如下:
  1. /*
  2. 通过字节流拷贝图片
  3. */

  4. import java.io.*;
  5. import java.util.*;
  6. import java.text.*;

  7. public class CopyPic
  8. {
  9.          public static void main(String[] args) throws Exception
  10.          {
  11.                  FileInputStream fis = null;
  12.                  FileOutputStream fos = null;
  13.                  
  14.                  try
  15.                  {
  16.                          fos = new FileOutputStream("g:\\charError_copy.png");
  17.                          fis = new FileInputStream("g:\\charError.png");//存于本地主机上的图片

  18.                          byte[] buf = new byte[1024];
  19.                         
  20.                          int len = 0;
  21.                         
  22.                          while((len = fis.read(buf)) != -1)
  23.                          {
  24.                                  fos.write(buf, 0 , len);
  25.                          }
  26.                  }
  27.                  catch(IOException e)
  28.                  {
  29.                           Date d=new Date();
  30.                                                  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  31.                              String s=sdf.format(d);
  32.                                                 PrintStream ps=new PrintStream("error.log");
  33.                                                 ps.println(s);
  34.                                                 System.setOut(ps);
  35.                                                 e.printStackTrace(System.out);
  36.                  }
  37.                  finally
  38.                  {
  39.                          try
  40.                          {
  41.                                  if(fis != null)
  42.                                  {
  43.                                          fis.close();
  44.                                  }
  45.                          }
  46.                          catch(IOException e)
  47.                          {
  48.                                  System.out.println("error");
  49.                          }
  50.                         
  51.                          try
  52.                          {
  53.                                  if(fos != null)
  54.                                  {
  55.                                          fos.close();
  56.                                  }
  57.                          }
  58.                          catch(IOException e)
  59.                          {
  60.                                  System.out.println("error");
  61.                          }
  62.                  }
  63.          }
  64. }
复制代码

作者: 黄晶    时间: 2012-12-5 18:07
魏秀盛 发表于 2012-12-5 17:56
我拷贝你的代码到EditPlus中保存的时候用的UTF-8编码的,编译运行也通过了,成功实现了图片的拷贝操作, ...

嗯,你的代码我用ANSI编码没问题,但是用UTF-8还是有问题....唉..我只能怀疑我的这个win7系统有点小故障了...{:soso_e101:}
作者: 魏秀盛    时间: 2012-12-5 18:28
黄晶 发表于 2012-12-5 18:07
嗯,你的代码我用ANSI编码没问题,但是用UTF-8还是有问题....唉..我只能怀疑我的这个win7系统有点小故障了. ...

呵呵,可能是系统原因了,我用的是Windows7旗舰版,语言包用的是US English,用System.getProperties查看File Encoding还是GBK,哈哈。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2