Код, который загружает пустой файл и не должен

#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();
        }
    }