Java 如果文件大小小于阈值大小限制,则DeferredFileOutputStream不创建文件

Java 如果文件大小小于阈值大小限制,则DeferredFileOutputStream不创建文件,java,fileoutputstream,Java,Fileoutputstream,我正在使用DeferredFileOutputStream将文件写入磁盘。我已将大小阈值指定为10K,有时如果文件大小小于阈值,则文件无法进入物理位置。我认为这是一种记忆。 在这种情况下,我是否需要显式写入磁盘 public static void main(String[] args) { try { FileOutputStream fos = new FileOutputStream(new File( "atest.zip"))

我正在使用DeferredFileOutputStream将文件写入磁盘。我已将大小阈值指定为10K,有时如果文件大小小于阈值,则文件无法进入物理位置。我认为这是一种记忆。 在这种情况下,我是否需要显式写入磁盘

public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream(new File(
               "atest.zip"));
         DeferredFileOutputStream differedFileOutputStream = new DeferredFileOutputStream(1, new File(
               "atest.zip"));
         ZipOutputStream zos = new ZipOutputStream(differedFileOutputStream);
         String file5Name = "folder/android.pdf";
         String file1Name = "file1.txt";
         String file2Name = "file2.txt";
         String file3Name = "folder/file3.txt";
         String file4Name = "folder/file4.txt";

         addToZipFile(file1Name, zos);
         addToZipFile(file2Name, zos);
         addToZipFile(file3Name, zos);
         addToZipFile(file4Name, zos);
         zos.close();
         differedFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

   }
public static void addToZipFile(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {
      System.out.println("Writing '" + fileName + "' to zip file");
      File file = new File(fileName);
      FileInputStream fis = new FileInputStream(file);
      ZipEntry zipEntry = new ZipEntry(fileName);
      zos.putNextEntry(zipEntry);

      byte[] bytes = new byte[1024];
      int length;
      while ((length = fis.read(bytes)) >= 0) {
         zos.write(bytes, 0, length);
      }

      zos.closeEntry();
      fis.close();
   }
从:

一种输出流,它将数据保留在内存中,直到达到指定的阈值,然后才提交到磁盘。如果流在达到阈值之前关闭,则数据将根本不会写入磁盘

然后它解释了这个类的用例:

此类源于文件上载处理。在这个用例中,您事先不知道要上载的文件的大小。如果文件较小,则希望将其存储在内存中(以提高速度),但如果文件较大,则希望将其存储到文件中(以避免内存问题)

所以答案是否定的,文件没有被写入。听起来,如果您在任何情况下都试图写入磁盘,那么您根本不应该使用它。您应该直接使用FileOutputStream。

从:

一种输出流,它将数据保留在内存中,直到达到指定的阈值,然后才提交到磁盘。如果流在达到阈值之前关闭,则数据将根本不会写入磁盘

然后它解释了这个类的用例:

此类源于文件上载处理。在这个用例中,您事先不知道要上载的文件的大小。如果文件较小,则希望将其存储在内存中(以提高速度),但如果文件较大,则希望将其存储到文件中(以避免内存问题)

所以答案是否定的,文件没有被写入。听起来,如果您在任何情况下都试图写入磁盘,那么您根本不应该使用它。您应该直接使用FileOutputStream。

从:

一种输出流,它将数据保留在内存中,直到达到指定的阈值,然后才提交到磁盘。如果流在达到阈值之前关闭,则数据将根本不会写入磁盘

然后它解释了这个类的用例:

此类源于文件上载处理。在这个用例中,您事先不知道要上载的文件的大小。如果文件较小,则希望将其存储在内存中(以提高速度),但如果文件较大,则希望将其存储到文件中(以避免内存问题)

所以答案是否定的,文件没有被写入。听起来,如果您在任何情况下都试图写入磁盘,那么您根本不应该使用它。您应该直接使用FileOutputStream。

从:

一种输出流,它将数据保留在内存中,直到达到指定的阈值,然后才提交到磁盘。如果流在达到阈值之前关闭,则数据将根本不会写入磁盘

然后它解释了这个类的用例:

此类源于文件上载处理。在这个用例中,您事先不知道要上载的文件的大小。如果文件较小,则希望将其存储在内存中(以提高速度),但如果文件较大,则希望将其存储到文件中(以避免内存问题)


所以答案是否定的,文件没有被写入。听起来,如果您在任何情况下都试图写入磁盘,那么您根本不应该使用它。您应该直接使用FileOutputStream。

没错。我找到的解决方案是,在我对所有文件进行了更正之后,检查是否达到阈值,如果没有,然后将文件显式写入OutputStream

public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream(new File(
               "atest.zip"));
         DeferredFileOutputStream differedFileOutputStream = new DeferredFileOutputStream(1, new File(
               "atest.zip"));
         ZipOutputStream zos = new ZipOutputStream(differedFileOutputStream);
         String file5Name = "folder/android.pdf";
         String file1Name = "file1.txt";
         String file2Name = "file2.txt";
         String file3Name = "folder/file3.txt";
         String file4Name = "folder/file4.txt";

         addToZipFile(file1Name, zos);
         addToZipFile(file2Name, zos);
         addToZipFile(file3Name, zos);
         addToZipFile(file4Name, zos);



  FileOutputStream fos = new FileOutputStream(new File(
                   "atest.zip"));
    if(differedFileOutputStream.isInMemory()) {
                differedFileOutputStream.writeTo(fos);
             }
         zos.close();
         differedFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

   }

没错。我找到的解决方案是,在我对所有文件进行了更正之后,检查是否达到阈值,如果没有,然后将文件显式写入OutputStream

public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream(new File(
               "atest.zip"));
         DeferredFileOutputStream differedFileOutputStream = new DeferredFileOutputStream(1, new File(
               "atest.zip"));
         ZipOutputStream zos = new ZipOutputStream(differedFileOutputStream);
         String file5Name = "folder/android.pdf";
         String file1Name = "file1.txt";
         String file2Name = "file2.txt";
         String file3Name = "folder/file3.txt";
         String file4Name = "folder/file4.txt";

         addToZipFile(file1Name, zos);
         addToZipFile(file2Name, zos);
         addToZipFile(file3Name, zos);
         addToZipFile(file4Name, zos);



  FileOutputStream fos = new FileOutputStream(new File(
                   "atest.zip"));
    if(differedFileOutputStream.isInMemory()) {
                differedFileOutputStream.writeTo(fos);
             }
         zos.close();
         differedFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

   }

没错。我找到的解决方案是,在我对所有文件进行了更正之后,检查是否达到阈值,如果没有,然后将文件显式写入OutputStream

public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream(new File(
               "atest.zip"));
         DeferredFileOutputStream differedFileOutputStream = new DeferredFileOutputStream(1, new File(
               "atest.zip"));
         ZipOutputStream zos = new ZipOutputStream(differedFileOutputStream);
         String file5Name = "folder/android.pdf";
         String file1Name = "file1.txt";
         String file2Name = "file2.txt";
         String file3Name = "folder/file3.txt";
         String file4Name = "folder/file4.txt";

         addToZipFile(file1Name, zos);
         addToZipFile(file2Name, zos);
         addToZipFile(file3Name, zos);
         addToZipFile(file4Name, zos);



  FileOutputStream fos = new FileOutputStream(new File(
                   "atest.zip"));
    if(differedFileOutputStream.isInMemory()) {
                differedFileOutputStream.writeTo(fos);
             }
         zos.close();
         differedFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

   }

没错。我找到的解决方案是,在我对所有文件进行了更正之后,检查是否达到阈值,如果没有,然后将文件显式写入OutputStream

public static void main(String[] args) {
      try {
         FileOutputStream fos = new FileOutputStream(new File(
               "atest.zip"));
         DeferredFileOutputStream differedFileOutputStream = new DeferredFileOutputStream(1, new File(
               "atest.zip"));
         ZipOutputStream zos = new ZipOutputStream(differedFileOutputStream);
         String file5Name = "folder/android.pdf";
         String file1Name = "file1.txt";
         String file2Name = "file2.txt";
         String file3Name = "folder/file3.txt";
         String file4Name = "folder/file4.txt";

         addToZipFile(file1Name, zos);
         addToZipFile(file2Name, zos);
         addToZipFile(file3Name, zos);
         addToZipFile(file4Name, zos);



  FileOutputStream fos = new FileOutputStream(new File(
                   "atest.zip"));
    if(differedFileOutputStream.isInMemory()) {
                differedFileOutputStream.writeTo(fos);
             }
         zos.close();
         differedFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }

   }