【发布时间】:2014-05-08 08:32:23
【问题描述】:
我正在尝试编写一个小型 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();
}
【问题讨论】:
-
请使用堆栈跟踪发布您的错误。
-
为什么要读写同一个文件?我想你的意思是
DataOutputStream bos = new DataOutputStream(socketOut);?你的代码有点混乱…… -
对不起,我有那个用于测试,我没有使用那个输出流
-
抱歉不清楚:没有错误,例如,当我发送文本文件时,它是空白的
-
两个问题,阅读器读取的是字符而不是字节,所以不能先发送字节数再发送字符。另一个问题是 readline 可以转换和切断行尾。只需取消 FileInputStream 并读取 byte[] 或使用其中一个 IOUtils 来抽取数据。
标签: java file dataoutputstream