Хорошо, я работаю над проектом, в котором я использую Java-программу для инициирования сокет-соединения между двумя классами (FileSender
и FileReceiver
). Моя основная идея заключалась в том, что FileSender
будет выглядеть так:
try {
writer = new DataOutputStream(connect.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//While we have bytes to send
while(filein.available() >0){
//We write them out to our buffer
writer.write(filein.read(outBuffer));
writer.flush();
}
//Then close our filein
filein.close();
//And then our socket;
connect.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Конструктор содержит код, который проверяет, существует ли файл, подключен ли сокет и т. Д. Внутри моего FileReader это, хотя:
input = recvSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(input.getInputStream()));
FileOutputStream fOut= new FileOutputStream(filename);
String line = br.readLine();
while(line != null){
fOut.write(line.getBytes());
fOut.flush();
line = br.readLine();
}
System.out.println("Before RECV close statements");
fOut.close();
input.close();
recvSocket.close();
System.out.println("After RECV clsoe statements");
Все внутри блока try-catch. Итак, то, что я пытаюсь сделать, это иметь FileSender
чтение в файле, преобразование в байты, отправку и очистку. FileReceiver
, затем читает в байтах, записывает в файл OUT, сбрасывает и продолжает ждать больше. Я закрываю все, что открываю, так что ... вот странная часть.
Когда я пытаюсь открыть созданный текстовый файл в Eclipse, он говорит мне: «Произошла ошибка SWT ... рекомендуется выйти из рабочей среды ... подробнее см. .Log». Появляется другое окно с сообщением «Необработанное исключение цикла событий (больше не обрабатывает)». Однако, если я пытаюсь открыть отправленный текстовый файл в notepad2, я получаю
ThisIsASentTextfile
Что хорошо (минус тот факт, что должны быть разрывы строк, но я работаю над этим ...). Кто-нибудь знает, почему это происходит? И пока мы проверяем, как добавить разрывы строк?
(И особенно ли это плохой способ передачи файлов через Java без получения других библиотек?)
Редактировать: обновление: я изменил свой код на следующий (FileReceiver), не меняя отправителя:
try {
input = recvSocket.accept();
//InputStream br = new InputStream(input.getInputStream());
FileWriter fOut= new FileWriter(filename);
//BufferedWriter out = new BufferedWriter(fOut);
//String line = br.
byte info = (byte) input.getInputStream().read();
while((int)info != 0){
fOut.write(info);
fOut.flush();
info = (byte) input.getInputStream().read();
}
fOut.flush();
System.out.println("Before RECV close statements");
fOut.close();
//input.close();
recvSocket.close();
System.out.println("After RECV clsoe statements");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Это работает. Я получаю текстовый файл, который имеет правильный размер в байтах (до того, как я получил стандартный размер 4 КБ), и имеет правильное форматирование. Я собираюсь опробовать его на следующем изображении и держать вас в курсе.