Java 从文件中读取并使用 DataOutputStream 发送

标签 java file dataoutputstream

我正在尝试编写一个迷你 FTP 应用程序,它从文件中读取二进制数据并将其发送到客户端。我的程序通常不会按预期运行,通常会发送文件,但不会完全发送(即发送文本文件,内容为空白)。我认为这可能是因为我使用文件阅读器来读取该行,尽管我不太明白为什么这会成为一个问题。 相关代码如下:

File file = new File(rootDirectory, name);
int filenum = (int)file.length();
long filelen = file.length();
System.out.println("File is: " + filenum + " bytes long");
socketOut.writeLong(filelen);
fileIn = new BufferedReader(new FileReader(file));
System.out.println("Sending: " + name);

while((line = fileIn.readLine()) != null){
       socketOut.writeBytes(line);
       socketOut.flush();
}

最佳答案

问题在于读者/作者读取文本(与 Input~/OutputStreams 相对)。 FileReader 内部使用默认的操作系统编码。这种转换永远不会对二进制文件进行。另请注意,readLine 会丢弃行结尾(\r\n\n\u0085)。从 Java 7 开始,你可以做

Files.copy(file.toPath(), socketOut);

而不是 wile 循环。

关于Java 从文件中读取并使用 DataOutputStream 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530127/

相关文章:

java - 如何在 Java 中使用套接字发送 JSON 响应

java - Jsoup Java HTML 解析器 : Executing Javascript events

objective-c - 苹果操作系统 : how to determine path is file or directory

java - URL编码的设计方案

string - 如何在Arduino上将数据写入文本文件

file - 在 cmd 中,如何列出包含具有特定扩展名的文件的文件夹?

java - 为什么 DataOutputStream.writeUTF() 在开头添加额外的 2 个字节?

java - Android:通过 TCP 套接字流式传输音频

java - SmartGWT:在本地和服务器端验证 DynamicForm

java - 导出到 Excel 以获取绝对路径