在编译时填充Java File对象

时间:2019-01-28 17:32:28

标签: java java-io

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

是否有一种方法可以使运行时可用的二进制文件等效于已读取的文件?还是有一种方法可以使File对象具有字节码的文件?请以我的情况为前提,不能选择使用文件系统来检索和打开文件。

感谢您的见解!

1 个答案:

答案 0 :(得分:0)

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

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