我有一个第三方库,需要在运行时填充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();
        }
    }
}

09-05 08:32