#java
#java
Вопрос:
У меня есть эта часть функции, в которой предполагается загружать файл, например pdf, с сервера и сохранять в новом каталоге. Он делает это, но пустой PDF или текстовый файл.Как это исправить.
`File urlfile = new File(host "/" path);
urlfile.getParentFile().mkdirs();
// create outputstream for request and inputstream for data
// download
FileOutputStream outS = new FileOutputStream(urlfile);
DataInputStream instream = new DataInputStream(newsocket.getInputStream());
// get rid of head part to get to actual file
String l = null;
String lastmodtime = null;
boolean done = false;
while (!(l = DAA.readLine()).equals("")) {
if (!done amp;amp; l.contains("Last-Modified:")) {
lastmodtime = l.substring(l.indexOf(' ') 1, l.length());
done = true;
System.out.println(l);
}
}
// read in bytes to correct file name
try {
byte[] inbytes = new byte[16384];
int input;
while ((input = instream.read(inbytes)) != -1) {
outS.write(inbytes, 0, input);
}
}`
Комментарии:
1. это не компилируется.
2. хорошо, где ошибка?
3. вы правы. он не входит в попытку и цикл, поэтому ничего не будет написано. Можете ли вы сказать мне, что мне делать
4. Вы должны точно описать проблему, с которой вы столкнулись, а не то, что должен делать код
5. в принципе, мне нужно загрузить файл с URL-адреса и сохранить его в моем кэше. Тем не менее, мой код загружает файл, каталог и изображения с URL-адреса, но PDF или текст, сохраненный с тем же именем, но в пустых документах ничего не написано.
Ответ №1:
Вы можете попробовать этот простой код, если хотите создать копию файла, или вы даже можете использовать apache commons io ( FileUtils.copyFile(source, dest)
) для операции копирования файлов java.
private static void copyFileUsingStream(File source, File dest)
throws IOException {
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(source);
os = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
} finally {
is.close();
os.close();
}
}