Здравствуйте, C0s, Вы писали:
C0s>Здравствуйте, Dima-amiD, Вы писали:
DA>>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?
C0s>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?
Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
Здравствуйте, Dima-amiD, Вы писали:
C0s>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет? DA>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
но ведь вряд ли эта ошибка возникает при вызове конструктора File?
Здравствуйте, C0s, Вы писали:
C0s>Здравствуйте, Dima-amiD, Вы писали:
C0s>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет? DA>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
C0s>но ведь вряд ли эта ошибка возникает при вызове конструктора File?
Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.
Здравствуйте, Dima-amiD, Вы писали:
C0s>>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет? DA>>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
C0s>>но ведь вряд ли эта ошибка возникает при вызове конструктора File?
DA>Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.
чтобы узнать, можно ли записать данные, надо попробовать
для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение
Здравствуйте, Dima-amiD, Вы писали:
DA>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?
Ну так создай объект File и не записывай его на диск :D В чем проблема?
Можешь быть уверен, сам файл на диск не запишется, до тех пор, пока ты его не запишешь.
Здравствуйте, Victor Repetsky, Вы писали:
VR>Здравствуйте, Dima-amiD, Вы писали:
DA>>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск? VR>Может подойдет такое?
А как этим пользоваться?
Здравствуйте, C0s, Вы писали:
C0s>Здравствуйте, Dima-amiD, Вы писали:
C0s>>>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет? DA>>>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
C0s>>>но ведь вряд ли эта ошибка возникает при вызове конструктора File?
DA>>Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.
C0s>чтобы узнать, можно ли записать данные, надо попробовать C0s>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение
C0s>>чтобы узнать, можно ли записать данные, надо попробовать C0s>>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение
DA>И что делать, если нельзя?
Здравствуйте, DK3981, Вы писали:
C0s>>>чтобы узнать, можно ли записать данные, надо попробовать C0s>>>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение
DA>>И что делать, если нельзя?
DK>Вы случайно не DK>
Здравствуйте, Trier, Вы писали:
VR>>Может подойдет такое? T>А как этим пользоваться?
Позволяет написать код который будет одинаково работать с файлами в памяти и на диске.
Как-то так
FileSystemManager fsManager = VFS.getManager();
// FileObject aFile = fsManager.resolveFile( "file:///C:/Documents and Settings/somefile" );
FileObject aFile = fsManager.resolveFile( "ram:///any/path/to/file.txt" );
InputStream is = aFile.getContent().getInputStream();
// Читаем...
OutputStream os = aFile.getContent()getOutputStream();
// Или пишем...
Формально в исходную задачу не подходит если какой-то код уже ссылается на File и его нельзя переделать.
В случае если его можно переделать или нужно написать заново есть два варианта —
1. Если нужно просто работать с какими-то данными, которые могут быть или в файле или в памяти, то лучше использовать только потоки.
2. Если нужно работать именно с файлами (кроме чтения-записи используются иерархии, копирование, переименование), то можно взять этот VFS.
Здравствуйте, Victor Repetsky, Вы писали:
VR>Позволяет написать код который будет одинаково работать с файлами в памяти и на диске. VR>Как-то так VR>
VR>FileSystemManager fsManager = VFS.getManager();
VR>// FileObject aFile = fsManager.resolveFile( "file:///C:/Documents and Settings/somefile" );
VR>FileObject aFile = fsManager.resolveFile( "ram:///any/path/to/file.txt" );
VR>InputStream is = aFile.getContent().getInputStream();
VR>// Читаем...
VR>OutputStream os = aFile.getContent()getOutputStream();
VR>// Или пишем...
VR>
VR>Формально в исходную задачу не подходит если какой-то код уже ссылается на File и его нельзя переделать. VR>В случае если его можно переделать или нужно написать заново есть два варианта - VR>1. Если нужно просто работать с какими-то данными, которые могут быть или в файле или в памяти, то лучше использовать только потоки. VR>2. Если нужно работать именно с файлами (кроме чтения-записи используются иерархии, копирование, переименование), то можно взять этот VFS.
Дело в том, что мне нужно получить именно объект типа File
Здравствуйте, Dima-amiD, Вы писали:
DA>Дело в том, что мне нужно получить именно объект типа File
Если надо чтобы существующий код принимал твой объект File, потом читал и писал, то по-моему решения нет, потому что для чтения/записи используется File[Input|Output]Stream, который в свою очередь использует NIO, и оба обращаются к ОС. От самого объекта File требуется только имя, то есть даже если будет специальный объект File код читающий-пишущий этого не заметит .
Еще идеи — сделать RAM Drive, использовать доступный сетевой диск.