2010-05-18 38 views
0

我必须创建一个代码来在远程机器上上传/下载文件。但是,当我上传文件的新行不会保存以及它会自动插入一些二进制字符。此外,我无法将文件保存为其实际格式,我必须将其另存为“filename.ser”。我正在使用java的序列化 - 反序列化概念。以其实际格式进行文件上传 - 下载

在此先感谢。

+0

谢谢你们。你的回答很有用。但我仍然有一些问题。我只能成功上传文本文件。当我试图对一个单词文件做同样的事情时,它会完全转换为二进制文件。在文本文件中,当我上传时,它本身也添加了一些二进制字符。请注意,我没有使用序列化(ObjectInputStream/ObjectOutputStream)。为了您的参考,我会告诉你我的代码。 – RAS 2010-05-19 06:03:24

+0

这里是我的代码:private static void upload()throws IOException,Exception {File upldfile = new File((path to the remote pc)+“/testSer.txt”); FileOutputStream fos = new FileOutputStream(upldfile); File file = new File(“c:/test1.txt”); FileInputStream fis = new FileInputStream(file); byte [] b =新字节[(int)file.length()]; for(int j = 0; j RAS 2010-05-19 06:03:43

回答

1

您究竟如何传输文件?如果您使用InputStreamOutputStream的实现,它们将逐字节地工作,所以最终应该得到二进制等于的输出。

如果您使用的ReaderWriter实现,但根据一些字符映射转换为字节的字符,然后保存时进行逆过程。根据各种机器的平台编码(如果不明确指定字符集,可能还有其他影响),最终可能会导致二进制文件的差异。

你提到换行符的事实使我认为你使用Readers来发送字符串(也可能是你自己通过手动添加新行来拼接字符串)。如果您希望文件是二进制相等的,那么将它们作为字节流发送并逐字存储。如果您希望它们与给定字符集中的字符串相同,请使用Readers和Writers,但明确指定字符集。如果你想让它们在平台默认设置中作为字符串传输(不是很有用),那么接受它们不会与文件一样是二进制文件。


(另外,你的问题实际上并没有提供太多的信息来解决它。对我来说,它基本上写着“我写了一些代码做X,并且它不工作,我有什么错?“你似乎认为你的代码是正确的,但没有列出它,但同时认识到它不是......)

+1

+1。他毫无疑问使用了'BufferedReader#readLine()'。这是修剪换行符的那个。你不想在**二进制**文件上做到这一点。 – BalusC 2010-05-18 12:11:04

相关问题