Когда вы сериализуете и сохраняете объект в Java, где создается файл? - PullRequest
0 голосов
/ 12 августа 2011

Когда вы сохраняете объект в java (используя serialize), где создается файл?

Например, если вы использовали этот метод http://www.rgagnon.com/javadetails/java-0075.html

Ответы [ 3 ]

5 голосов
/ 12 августа 2011

Если вы используете ObjectOutputStream для сериализации и оборачиваете его вокруг FileOutputStream, тогда объекты попадут в этот файл.

Например (из Javadoc ObjectOutputStream):

FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());

oos.close();

Это создаст файл «t.tmp» в рабочем каталоге Java-приложения.

А про рабочий каталог ... Если вы используете IDE для запуска своего приложения, то рабочий каталог зависит от того, куда IDE помещает скомпилированные классы и как он запускает ваше приложение.

Вы можете использовать следующий код для печати рабочего каталога:

File f = new File(".");
System.out.println(f.getAbsolutePath());

"." представляет «текущий» каталог.

3 голосов
/ 12 августа 2011

Как правило, где вы сохранили его.Как создается File?


Обновление

По ссылке кажется, что код создает File путем создания экземпляра файла из String, представляющего имябез пути.Другие обращались к этому.

Вместо этого я хотел бы подчеркнуть следующее. Не создавайте файлы там. Если они являются временными файлами, поместите их во временный каталог, как уже упоминалось в другом ответе.Если это файлы, к которым программе может понадобиться доступ позже, поместите их в стабильный и воспроизводимый путь, например, в подкаталог user.home.

EG (псевдокод, не проверен)

String name = "data.ser";
String[] pkgs = {"com", "our", "main"};
File f = new File(System.getProperty("user.home");
for (String pkg : pkgs) {
    f = new File(f, pkg);
}
f = new File(f, name);
...
1 голос
/ 12 августа 2011

Если вы имеете в виду стандартную сериализацию с использованием java.io.Serializable, то «стандартного» расположения не существует. Вы скорее создадите экземпляр ObjectOutputStream, который украшает aribtrary OutputStream.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(someObject);
oos.close();

В этом примере объект был записан в памяти. Если вы используете FileOutputStream, то вы можете сериализовать ваш объект в произвольный файл.


Edit:

По вашей ссылке полученный файл будет сохранен в «текущем рабочем каталоге», который является каталогом, из которого вы запустили свое Java-приложение с помощью команды java ....

...