Створіть об'єкт «Файл» в пам'яті з рядка на Java


113

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

Чи можу я використовувати потоки та "кидати" їх на об'єкти File?


2
Чи можете ви зв’язати / опублікувати код, який бере Fileоб’єкт? Як було сказано у відповідях, Fileоб’єкт - це як посилання на місце розташування у файловій системі, і тому важко було б імітувати без фактичного файлу. Якщо, однак, ваша функція взяла a FileReaderабо a FileInputStream, ви можете легко змінити код, щоб прийняти нефайлове введення.
101100

Файли, зіставлені з пам'яттю, можуть бути вашим вибором. Це спеціальні файли на Java, які дозволяють програмі Java отримувати доступ до вмісту безпосередньо з пам'яті. Для детальної інформації перейдіть за цим посиланням: javarevisited.blogspot.com/2012/01/…
Bacteria

Відповіді:


48

Немає; екземпляри класу Fileпредставляють шлях у файловій системі. Тому ви можете використовувати цю функцію лише з файлом. Але, можливо, є перевантаження, яка InputStreamзамість цього приймає ?


76

Зазвичай, коли метод приймає файл, поруч є інший метод, який приймає потік. Якщо це не так, 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

Файл об'єкта в Java є поданням шляху до директорії або файлу, а не саме файл. Вам не потрібно мати доступ для запису до файлової системи, щоб створити Fileоб'єкт, він вам потрібен лише в тому випадку, якщо ви насправді записуєте у файл (наприклад, використовуючи FileOutputStream )


1
Якщо вам потрібно передати файл у зовнішній API, вам потрібен фактичний файл - передача "порожнього" файлового об'єкта не працюватиме.
Андрій Волгін

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.