Заполнить объект Java File во время компиляции - PullRequest
0 голосов
/ 28 января 2019

У меня есть сторонняя библиотека, которая требует заполнения объекта java File во время выполнения.Я расширил этот код, но мне не нужна часть, связанная с файлами.Однако для моих целей я вынужден создать и использовать объект File и читать из него.

Есть ли способ получить двоичный эквивалент уже прочитанного файла во время выполнения?Или есть способ получить файл в виде байт-кода, уже доступного для объекта File?Пожалуйста, примите во внимание мою ситуацию, что переход к файловой системе для получения и открытия файла невозможен.

Спасибо за любые идеи!

1 Ответ

0 голосов
/ 28 января 2019

Вы можете создать временный файл и удалить после его завершения.

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

Если вам нужен ФИЗИЧЕСКИЙ файл в их системе, вы можете создать его следующим образом:

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