Создать объект File в памяти из строки в Java


113

У меня есть функция, которая принимает файл в качестве аргумента. Я не хочу создавать / записывать новый файл (у меня нет доступа на запись в файловую систему), чтобы передать свои строковые данные функции. Я должен добавить, что данные String не существуют в файле (поэтому я не могу прочитать свои данные из файла).

Могу ли я использовать потоки и «преобразовывать» их в объекты File?


2
Можете ли вы связать / опубликовать код, который принимает Fileобъект? Как указано в ответах, Fileобъект похож на ссылку на место в файловой системе, поэтому его сложно смоделировать без реального файла. Если, однако, ваша функция принимает a FileReaderили a FileInputStream, вы можете легко изменить код, чтобы принимать нефайловый ввод.
101100,

Файлы с отображением памяти могут быть вашим выбором. Это специальные файлы в Java, которые позволяют программе Java получать доступ к содержимому непосредственно из памяти. Для получения дополнительной информации перейдите по этой ссылке: javarevisited.blogspot.com/2012/01/…
Бактерии

Ответы:


48

Нет; экземпляры класса Fileпредставляют путь в файловой системе. Следовательно, вы можете использовать эту функцию только с файлом. Но, может быть, есть перегрузка, которая берет InputStreamвзамен?


77

Обычно, когда метод принимает файл, поблизости есть другой метод, принимающий поток. Если это не так, API плохо запрограммирован. В противном случае вы можете использовать временные файлы, разрешение на которые обычно предоставляется во многих случаях. Если это апплет, вы можете запросить разрешение на запись .

Пример:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}

1
Невозможно запросить разрешение на запись (это Google AppEngine)
Джон Ромеро

12

Объект File в Java - это представление пути к каталогу или файлу, а не сам файл. Вам не нужно иметь доступ на запись в файловую систему для создания Fileобъекта, он вам нужен только в том случае, если вы действительно собираетесь записывать в файл (например, используя FileOutputStream )


1
Если вам нужно передать файл внешнему API, вам нужен настоящий файл - передача «пустого» объекта File не сработает.
Андрей Волгин

8

FileКласс представляет собой «идею» файл, а не фактическая ручки , чтобы использовать для ввода / вывода. Вот почему у Fileкласса есть .exists()метод, который сообщает вам, существует файл или нет. (Как у вас может быть Fileобъект, которого не существует?)

Напротив, построение new FileInputStream(new File("/my/file"))дает вам фактический поток, из которого читаются байты.


-1
FileReader r = new FileReader(file);

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

пример

Ссылка выше показывает вам пример того, как это сделать. В другом сообщении к этому ответу говорится, что для загрузки файла в память вам не нужен доступ на запись, если вы не планируете вносить изменения в фактический файл.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.