Я просто нашел VFS как способ доступа к sftp. Кажется, нужно работать, но все примеры предполагают локальный файл; вместо этого у меня есть данные в памяти. Я вижу только метод copyFrom (FileObject), без перегрузок, принимающих поток или буфер... Поэтому я попробовал баран, поскольку он звучит примерно правильно (какая-то документация не повредит, но я не могу это прекратить), и следующий тест преуспеет, Также работало копирование в файл sftp FileObject.
ВОПРОС. Он дает следующий вывод: INFO: использование "C:\Users\myname\AppData\Local\Temp\vfs_cache" в качестве хранилища временных файлов.
- на самом деле он пишет временный файл? Это то, чего я пытался избежать (из-за потенциальных проблем с разрешениями/параллелизмом на серверах Unix, где эта вещь будет работать). Если да, то как мне сделать это полностью в памяти?
// try to copy a string from memory into a FileObject
public class VFSTest {
public static void main(String[] args) throws IOException {
String hello = "Hello, World!";
FileObject ram = VFS.getManager().resolveFile("ram:/tmp");
OutputStream os = ram.getContent().getOutputStream();
os.write(hello.getBytes());
ram.getContent().close();
FileObject local = VFS.getManager().resolveFile("C:\\foo.txt");
local.copyFrom(ram, Selectors.SELECT_SELF);
}
}
Нет, сообщение журнала является общим, созданным при настройке диспетчера файловой системы. Он используется для так называемого репликатора. Вы не используете его в своем примере.
Да файловая система ram - это одна из возможностей для хранения файлов в памяти. Если у вас, с другой стороны, есть существующий источник данных или байтовый буфер, вам нужно будет его перекачать: в VFS нет функции для чтения из InputStream (есть один, чтобы написать содержимое FileContent в OutputStream). Для этого обычно используется commons-io IOUtils#copy()
.
Да, описание немного короткое, но на самом деле этого мало. Единственная фактическая конфигурация - это возможный максимальный размер. (Я действительно заметил, что ссылка на файловую систему также говорит о предикате для фильтрации ресурсов, но это не реализовано, поэтому я удалил его из версии 2.1 этой страницы).
write()
). Если вы создаете файлы оперативной памяти, вы можете вместо этого попытаться создать удаленные файлы напрямую и сохранить копию оперативной памяти.