在编译时填充一个 Java 文件对象

Populate a Java File object at compile time

我有一个第三方库需要在运行时填充 java File 对象。我已经扩展了这段代码,但我不需要与文件相关的部分。但是,为了我的目的,我不得不创建和使用 File 对象并从中读取。

有没有办法让我在运行时获得与已读文件等效的二进制文件?或者有没有办法让文件作为字节码已经可用于 File 对象?请假设我的情况是无法通过文件系统检索和打开文件。

感谢您的任何见解!

您可以创建一个临时文件并在程序完成后删除。

import java.io.*;
import java.nio.file.*;

public class Program {
    public static final File EMPTY_FILE = createTmpFile("empty.dat");

    private static final File createTmpFile(final String filename) {
        String tmpDir = System.getProperty("java.io.tmpdir");
        Path filePath = Paths.get(tmpDir, filename);
        return filePath.toFile();
    }

    public static void main(String[] args) {
        try {
            // Do stuff...
            System.out.println(EMPTY_FILE.getCanonicalPath());
            Thread.sleep(2000);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            // Cleanup...
            EMPTY_FILE.delete();
        }
    }
}

如果您需要在他们的系统上创建一个 PHYSICAL 文件,您可以像这样创建它:

import java.io.*;
import java.nio.file.*;

public class Program {
    public static final String TMP_DIR = System.getProperty("java.io.tmpdir");
    public static final File EMPTY_FILE = createTmpFile("empty.dat");

    private static final File createTmpFile(final String filename) {
        Path filePath = null;
        try {
            byte[] data = { 0 }; // Write a single byte of data
            filePath = Files.write(Paths.get(TMP_DIR, filename), data);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return filePath.toFile();
    }

    public static void main(String[] args) {
        try {
            // Do stuff...
            System.out.println(EMPTY_FILE.getCanonicalPath());
            Thread.sleep(2000);
        } catch (InterruptedException | IOException e) {
            e.printStackTrace();
        } finally {
            // Cleanup...
            EMPTY_FILE.delete();
        }
    }
}