java中的uuencode压缩文件
Posted
技术标签:
【中文标题】java中的uuencode压缩文件【英文标题】:uuencode zipfile in java 【发布时间】:2012-09-25 03:31:55 【问题描述】:我是一个新手用户,试图弄清楚如何使用 uuencode 方法。我们有一个只允许上传单个文本文件的表单。现在看起来只会上传 zip 文件。我正在尝试包含 uuencode 方法来将字节转换为字符串,这样我们就不必修改其余代码来适应二进制文件。
原码:
public void SettingUpload(File inputfile)
this.inputfile = inputfile;
我改成
public void SettingUpload(File inputfile)
UUEncoder uuec = new UUEncoder();
try
InputStream is = new FileInputStream(inputfile);
OutputStream os = new FileOutputStream(inputfile);
uuec.encodeBuffer(is, os);
this.inputfile = inputfile;
catch (Throwable error)
reportError(error, "Error converting zipfile");
当我测试它时,我得到了 java.io.EOFException。我抓住了 uuencoded 文件并手动对其进行了 uudecoded。当我试图解压缩它时,
bash1:~>unzip s6b0c9e663c74f72941bd8271a5fac3b.bin
Archive: s6b0c9e663c74f72941bd8271a5fac3b.bin
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
编辑:
我改成:
public void SettingUpload(File inputfile)
UUEncoder uuec = new UUEncoder();
try
InputStream is = new FileInputStream(inputfile);
File OutputFile=new File("Output");
OutputFile.createNewFile();
OutputStream os = new FileOutputStream(OutputFile);
uuec.encodeBuffer(is, os);
this.OutputFile = OutputFile;
catch (Throwable error)
reportError(error, "Error converting zipfile");
我收到以下错误:
cannot find symbol
symbol : variable OutputFile
【问题讨论】:
你不应该使用相同的文件作为输入和输出。 【参考方案1】:正如浩准所说,你不应该这样做:
InputStream is = new FileInputStream(inputfile); // Good
OutputStream os = new FileOutputStream(inputfile); // Bad
你应该输出到一个单独的文件,否则你第一次写的时候,你会丢弃原始文件。
更新示例
这对我来说很好......
public static void main(String[] args)
File inputfile = new File("file/to/be/encoded");
File outFile = new File("out.uue");
UUEncoder uuec = new UUEncoder();
InputStream is = null;
OutputStream os = null;
try
is = new FileInputStream(inputfile);
os = new FileOutputStream(outFile);
uuec.encodeBuffer(is, os);
catch (Exception error)
error.printStackTrace();
finally
try
is.close();
catch (Exception e)
try
os.close();
catch (Exception e)
File newFile = new File("decoded.jpg");
UUDecoder decoder = new UUDecoder();
try
is = new FileInputStream(outFile);
os = new FileOutputStream(newFile);
decoder.decodeBuffer(is, os);
catch (Exception e)
e.printStackTrace();
finally
try
is.close();
catch (Exception e)
try
os.close();
catch (Exception e)
另外,我会从你的编码方法返回输出文件
public void SettingUpload(File inputfile) throws IOException
UUEncoder uuec = new UUEncoder();
File outFile = File.createTempFile("encoded", "uue");
InputStream is = null;
OutputStream os = null;
try
is = new FileInputStream(inputfile);
os = new FileOutputStream(outFile );
uuec.encodeBuffer(is, os);
finally
try
is.close();
catch (Exception e)
try
os.close();
catch (Exception e)
return outFile;
您永远不应该抑制异常。调用者如何知道是否出现问题?
此外,如果您打开一个流,您有责任关闭它,因此请确保您关闭了您的流。
【讨论】:
感谢您的快速回复。我添加了 File OutputFile=new File("Output"); OutputFile.createNewFile(); 我收到以下错误 [293,7] 找不到符号 symbol : variable OutputFile. 谢谢!我无法返回 outFile。设置 this.outFile=outFile 会产生符号错误。有没有替代品 不,不是。除非您在类级别有一个可以分配给它的成员变量,否则返回确实是最可行的方法。以上是关于java中的uuencode压缩文件的主要内容,如果未能解决你的问题,请参考以下文章