URL-соединение (FTP) в Java - простой вопрос - PullRequest
2 голосов
/ 08 мая 2011

У меня простой вопрос.Я пытаюсь загрузить файл на мой FTP-сервер в Java.

У меня есть файл на моем компьютере, и я хочу сделать копию этого файла и загрузить его.Я попытался вручную записать каждый байт файла в выходной поток, но это не сработало для сложных файлов, таких как zip-файлы или pdf-файлы.

File file = some file on my computer;
String name = file.getName();
URL url = new URL("ftp://user:password@domain.com/" + name +";type=i");
URLConnection urlc = url.openConnection();
OutputStream os = urlc.getOutputStream();

//then what do I do?

Просто для пинка, вот что я пыталсяdo:

OutputStream os = urlc.getOutputStream();
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
while(line != null && (!line.equals(""))) {
    os.write(line.getBytes());
    os.write("\n".getBytes());
    line = br.readLine();
}
os.close();

Например, когда я делаю это с PDF, а затем пытаюсь открыть PDF, который я запускаю с этой программой, он говорит, что произошла ошибка при попытке открыть PDF.Я предполагаю, потому что я пишу "\ n" в файл?Как мне скопировать файл без этого?

Ответы [ 3 ]

3 голосов
/ 08 мая 2011

Не используйте ни один из классов Reader или Writer, когда вы пытаетесь скопировать байтовое точное содержимое двоичного файла.Используйте их только для простого текста!Вместо этого используйте классы InputStream и OutputStream;они вообще не интерпретируют данные, в то время как классы Reader и Writer интерпретируют данные как символы.Например,

OutputStream os = urlc.getOutputStream();
FileInputStreamReader fis = new FileInputStream(file);
byte[] buffer = new byte[1000];
int count = 0;
while((count = fis.read(buffer)) > 0) {
    os.write(buffer, 0, count);
}

Правильно ли здесь используется URLConnection, я не знаю;использование Apache Commons FTP (как предложено в другом месте) было бы отличной идеей.Несмотря на это, это был бы способ прочитать файл.

2 голосов
/ 08 мая 2011

Используйте BufferedInputStream для чтения и BufferedOutputStream для записи. Взгляните на этот пост: http://www.ajaxapp.com/2009/02/21/a-simple-java-ftp-connection-file-download-and-upload/

InputStream is = new FileInputStream(localfilename);
BufferedInputStream bis = new BufferedInputStream(is);
OutputStream os =m_client.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] buffer = new byte[1024];
int readCount;
while( (readCount = bis.read(buffer)) > 0) {
    bos.write(buffer, 0, readCount);
}
bos.close();
0 голосов
/ 08 мая 2011

FTP обычно открывает другое соединение для передачи данных. Поэтому я не уверен, что этот подход с URLConnection идет работать. Я настоятельно рекомендую вам использовать специализированный FTP-клиент. Apache Commons может иметь один.

Проверьте это http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...