File
От: Dima-amiD  
Дата: 18.03.08 08:54
Оценка:
Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?
Re: File
От: Cider Россия  
Дата: 18.03.08 08:56
Оценка: +1 -1
Здравствуйте, Dima-amiD, Вы писали:

DA>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?


Можно.
Cider
Re: File
От: C0s Россия  
Дата: 18.03.08 08:56
Оценка:
Здравствуйте, Dima-amiD, Вы писали:

DA>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?


да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?
Re[2]: File
От: Dima-amiD  
Дата: 18.03.08 09:05
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, Dima-amiD, Вы писали:


DA>>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?


C0s>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?

Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?
Re[3]: File
От: C0s Россия  
Дата: 18.03.08 10:16
Оценка:
Здравствуйте, Dima-amiD, Вы писали:

C0s>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?

DA>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?

но ведь вряд ли эта ошибка возникает при вызове конструктора File?
Re[4]: File
От: Dima-amiD  
Дата: 18.03.08 10:34
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, Dima-amiD, Вы писали:


C0s>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?

DA>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?

C0s>но ведь вряд ли эта ошибка возникает при вызове конструктора File?


Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.
Re: File
От: Victor Repetsky Украина  
Дата: 18.03.08 10:41
Оценка:
Здравствуйте, Dima-amiD, Вы писали:

DA>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?

Может подойдет такое?
SCJP, SCEA
Re[5]: File
От: C0s Россия  
Дата: 18.03.08 10:41
Оценка: 1 (1)
Здравствуйте, Dima-amiD, Вы писали:

C0s>>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?

DA>>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?

C0s>>но ведь вряд ли эта ошибка возникает при вызове конструктора File?


DA>Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.


чтобы узнать, можно ли записать данные, надо попробовать
для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение
Re: File
От: vb-develop  
Дата: 18.03.08 11:14
Оценка:
Здравствуйте, Dima-amiD, Вы писали:

DA>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?


Ну так создай объект File и не записывай его на диск :D В чем проблема?
Можешь быть уверен, сам файл на диск не запишется, до тех пор, пока ты его не запишешь.
Re[2]: File
От: Trier  
Дата: 18.03.08 11:54
Оценка:
Здравствуйте, Victor Repetsky, Вы писали:

VR>Здравствуйте, Dima-amiD, Вы писали:


DA>>Скажите, пожалуйста, можно ли как-нибудь создать объект File, не записывая его на диск?

VR>Может подойдет такое?
А как этим пользоваться?
Re[6]: File
От: Dima-amiD  
Дата: 18.03.08 11:57
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>Здравствуйте, Dima-amiD, Вы писали:


C0s>>>>>да, но вызов new File("bla") не приводит к созданию файла "bla" на диске, разве нет?

DA>>>>Не приводит, но если в место, куда потом будет записан файл bla запись запрещена, то разве не возникнет ошибки?

C0s>>>но ведь вряд ли эта ошибка возникает при вызове конструктора File?


DA>>Это правда, но мне, к сожалению, нужно не просто вызвать конструктор, но еще и записать данные в файл.


C0s>чтобы узнать, можно ли записать данные, надо попробовать

C0s>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение

И что делать, если нельзя?
Re[7]: File
От: DK3981 Россия  
Дата: 18.03.08 12:51
Оценка:
C0s>>чтобы узнать, можно ли записать данные, надо попробовать
C0s>>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение

DA>И что делать, если нельзя?


Вы случайно не
File.createTempFile(String prefix, String suffix);

хотите получить?
... << RSDN@Home 1.2.0 alpha rev. 728>>
Re[8]: File
От: Dima-amiD  
Дата: 18.03.08 13:05
Оценка:
Здравствуйте, DK3981, Вы писали:

C0s>>>чтобы узнать, можно ли записать данные, надо попробовать

C0s>>>для этого годится метод File.createNewFile(), если файл можно записывать, то он его создаст, если нет — выдаст исключение

DA>>И что делать, если нельзя?


DK>Вы случайно не

DK>
File.createTempFile(String prefix, String suffix);

DK>хотите получить?

Насколько я знаю,File.createTempFile тоже создает файл, просто в temp директории.
Re[3]: File
От: Victor Repetsky Украина  
Дата: 18.03.08 13:17
Оценка: 3 (1)
Здравствуйте, 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.
SCJP, SCEA
Re[4]: File
От: Dima-amiD  
Дата: 18.03.08 14:09
Оценка:
Здравствуйте, 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
Re[5]: File
От: Victor Repetsky Украина  
Дата: 18.03.08 14:44
Оценка:
Здравствуйте, Dima-amiD, Вы писали:

DA>Дело в том, что мне нужно получить именно объект типа File

Если надо чтобы существующий код принимал твой объект File, потом читал и писал, то по-моему решения нет, потому что для чтения/записи используется File[Input|Output]Stream, который в свою очередь использует NIO, и оба обращаются к ОС. От самого объекта File требуется только имя, то есть даже если будет специальный объект File код читающий-пишущий этого не заметит .
Еще идеи — сделать RAM Drive, использовать доступный сетевой диск.
SCJP, SCEA
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.