【问题标题】:File upload-download in its actual format以实际格式上传-下载文件
【发布时间】:2011-02-20 20:30:02
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 谢谢你们俩。你的回答很有用。但我仍然有一些问题。我只能成功上传文本文件。当我尝试对 word 文件执行相同操作时,它会完全转换为二进制文件。在我上传的文本文件中,它本身也会添加一些二进制字符。请注意这里我没有使用序列化(ObjectInputStream/ObjectOutputStream)。很快我会向您展示我的代码供您参考。
  • 这是我的代码: private static void upload() throws IOException,Exception { File upldfile = new File((远程电脑的路径) + "/testSer.txt"); FileOutputStream fos = new FileOutputStream(upldfile);文件 file = new File("c:/test1.txt"); FileInputStream fis = new FileInputStream(file);字节[] b = 新字节[(int)file.length()]; for(int j=0; j

标签: java file upload download


【解决方案1】:

您究竟是如何传输文件的?如果您使用的是 InputStreamOutputStream 的实现,它们在逐字节级别上工作,因此您最终应该得到二进制相等的输出。

如果您使用ReaderWriter 的实现,它们会根据一些字符映射将字节转换为字符,然后在保存时执行相反的过程。根据各种机器的平台编码(如果您没有明确指定字符集,可能还有其他影响),您很可能最终会在二进制文件中产生差异。

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


(另外,您的问题确实没有提供太多信息来解决它。对我来说,它基本上是“我写了一些代码来做X,但它不起作用。我哪里出错了?”您似乎通过不列出它来假设您的代码是正确的,但同时认识到它不是......)

【讨论】:

  • +1。毫无疑问,他使用的是BufferedReader#readLine()。这是修剪换行符的那个。您不想对 binary 文件执行此操作。
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多