是否可以使用 inputStream 读取临时文件?

问题描述

我只是想知道是否可以使用输入流来搜索存储在计算机临时文件夹中的临时文件?我只需要测试一些东西并需要读取该临时文件。这个想法基本上是创建一个 XML 文件,将其存储为临时文件并通过输入流读取它。该文件将非常大,所以我需要它是一个临时文件,以便我可以在运行完 Junit 测试后将其删除代码可以在下面找到。任何输入表示赞赏。谢谢。

Test class{
  private String name;
  private int age;

 //constructor
 //getter and setters
}

Another class {     
  private void createTemporaryXmlFile(){
    //create temp
    String temporaryDirectoryOp = System.getProperty("java.io.tmpdir");
    File tmpDirectory = new File(temporaryDirectoryOp );
    File fileStream = File.createTempFile("myFile",".xml",temporaryDirectoryOp );
    OutputStream outputStream= new FileOutputStream(fileStream );
  
    //marshall from Test POJO to XML
    JAXBContext jaxbContext = JAXBContext.newInstance(Test.class);
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
    jaxbMarshaller.marshal(testClass,outputStream);

    fileStream.deleteOnExit();

    fos.close();
    dos.close();
  }
}

解决方法

正如 Piotr 所说,临时文件和“普通”文件在 Java 方面是相同的。 您可以从函数中返回 fileStream,进行测试,然后调用

fileStream.delete();

但是当你调用 fileStream.deleteOnExit(); (您的代码中有一个带有变量名称的拼写错误),无论如何,该文件会在 JVM 终止(测试结束)时被删除。但我认为在使用后删除文件并使用“deleteOnExit”作为后备是一种更好的风格。