Ответ 1
Нет; экземпляры класса File
представляют собой путь в файловой системе. Поэтому вы можете использовать эту функцию только с файлом. Но, возможно, есть перегрузка, которая принимает вместо InputStream
?
У меня есть функция, которая принимает файл как аргумент. Я не хочу создавать/писать новый файл (у меня нет доступа на запись к файловой системе), чтобы передать мои строковые данные в функцию. Я должен добавить, что данные String не существуют в файле (поэтому я не могу прочитать свои данные из файла).
Могу ли я использовать потоки и "отличать" их от объектов File?
Нет; экземпляры класса File
представляют собой путь в файловой системе. Поэтому вы можете использовать эту функцию только с файлом. Но, возможно, есть перегрузка, которая принимает вместо InputStream
?
Обычно, когда метод принимает файл, есть другой метод рядом с которым принимает поток. Если это не так, 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) {
}
A File объект в Java - это представление пути к каталогу или файлу, а не к самому файлу. Вам не нужно иметь доступ на запись к файловой системе для создания объекта File
, вам это нужно только в том случае, если вы намереваетесь фактически записать файл (используя FileOutputStream)
Класс File
представляет "идею" файла, а не фактический дескриптор для ввода-вывода. Вот почему класс File
имеет метод .exists()
, чтобы сообщить вам, существует ли файл или нет. (Как вы можете иметь объект File
, который не существует?)
В отличие от этого, построение a new FileInputStream(new File("/my/file"))
дает реальный поток для чтения байтов.
FileReader r = new FileReader(file);
С помощью программы чтения файлов загрузите файл, а затем запишите его содержимое в строковый буфер.
В приведенной выше ссылке показан пример того, как это сделать. Как говорится в другом ответе на этот ответ, чтобы загрузить файл в память, вам не нужен доступ на запись, если вы не планируете вносить изменения в фактический файл.