Java コードでいくつかのオブジェクトをシリアライズしたいと考えています。ハードドライブのランダムなフォルダーに入れたくありません。私のEclipseプロジェクトフォルダーのA FOLDERの中に入れたいです。このフォルダを作成してオブジェクトを格納するにはどうすればよいですか?
これは良い習慣ですか?このプロジェクトから自己完結型の JAR を作成しようとすると、問題は発生しますか?
Java コードでいくつかのオブジェクトをシリアライズしたいと考えています。ハードドライブのランダムなフォルダーに入れたくありません。私のEclipseプロジェクトフォルダーのA FOLDERの中に入れたいです。このフォルダを作成してオブジェクトを格納するにはどうすればよいですか?
これは良い習慣ですか?このプロジェクトから自己完結型の JAR を作成しようとすると、問題は発生しますか?
以下のソース コードは、現在のディレクトリにサブフォルダーを作成する方法を示しています。
import java.io.File;
public class SourceCodeProgram {
public static void main(String argv[]) throws Exception {
File currentFolder = new File(".");
File workingFolder = new File(currentFolder, "serialized");
if (!workingFolder.exists()) {
workingFolder.mkdir();
}
System.out.println(workingFolder.getAbsolutePath());
}
}
このソース コードを実行して Eclipse プロジェクトを更新するとserialized
、Eclipse プロジェクト構造にディレクトリが表示されます。これで、それを使用してすべてのファイルを保存できます。
私のアプリでは、ハード ドライブにデータを保存する場合、常にユーザーの推奨を使用します。application.properties
キーを含むファイル を作成します:
working.folder=/example/app-name
アプリは最初にこのファイルを読み取り、必要に応じてこのフォルダーを作成します。2番目の解決策は「アプリパラメーター」です。ユーザーからのパラメーターが 1 つまたは 2 つだけ必要な場合は、コマンド ラインから読み取ります。たとえば、ユーザーはそのコマンドを使用してアプリを実行します。
java -jar app.jar -dir /example/app-name
ユーザーがフォルダーを提供しない場合、デフォルトのフォルダー -現在のディレクトリを使用します。
便利なリンク:
それらのシリアライズ可能なオブジェクトが持つ情報によって異なります。
また、コードベース内にフォルダーが必要な場合 (ただし、フォルダーとしてのみデプロイする場合)、コードを記述してファイルを読み書きできます。
URL dir_url = ClassLoader.getSystemResource(dir_path);
// Turn the resource into a File object
File dir = new File(dir_url.toURI());
// List the directory
String files = dir.list()
注 ディレクトリはクラスパスにある必要があります。
これを行うには、次の 2 つのことが必要です。A) 特定のフォルダーにアクセス/作成する B) 実際にオブジェクトをシリアル化し、ディスクに保存する。
A) の場合、これは確かに、次の方法を示す他の回答によって回答されます。1) フォルダーが存在するかどうかを確認します。2) フォルダが存在しない場合は作成します。さらに、Eclipse で起動されたプロジェクトには、作業ディレクトリーとして Eclipse プロジェクト・フォルダーがあります。
B) の場合、 FileOutputStream を使用してオブジェクトをシリアル化する必要があります。http://www.tutorialspoint.com/java/java_serialization.htmを参照してください。各オブジェクトを個別のファイルにシリアル化するか、すべてのオブジェクトへの参照を含む ArrayList (またはその他のデータ構造) を持つ 1 つのクラスを作成できます。
オブジェクトをインスタンス化する必要がなかったので、静的メソッドを使用してあなたが求めたことを実行するサンプルクラスの下。また、Eclipse プロジェクトで F5 を押して、パッケージ エクスプローラーを更新し、新しいフォルダーとファイルを表示する必要があります。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class CreateDirAndSerialize {
public static void main(String args[])
{
ArrayList<String> sampleString = new ArrayList<String> ();
sampleString.add("Test1");
sampleString.add("Test2");
sampleString.add("Test2");
//Get the directory
File directory = getSerializedDirectory();
writeObjects(directory, sampleString);
}
public static void writeObjects(File directory, Object object)
{
try
{
FileOutputStream fileOut =
new FileOutputStream(directory+"//serializedData");
ObjectOutputStream out =
new ObjectOutputStream(fileOut);
out.writeObject(object);
out.close();
fileOut.close();
}catch(IOException i)
{
i.printStackTrace();
}
}
public static File getSerializedDirectory()
{
File serializedDir = new File("serialized");
if (!serializedDir.exists()) {
serializedDir.mkdir();
}
return serializedDir;
}
}
質問がEclipse内のプロジェクトに言及しているため、上記はEclipseプロジェクト内のコード用です。Eclipse 自体とやり取りしたい場合は、Eclipse プラグインの開発について話しているので、これはまったく別の話なので、それを指定する必要があります。
最後に、必要な変数を保持するカスタム クラスを作成し、他のすべてのオブジェクトを含むシングルトン オブジェクトをインスタンス化することもできます。ただし、オブジェクトをシリアル化する際にはいくつかの制限があります。たとえば、次のような制限があります。 - static 修飾子を使用したオブジェクト参照はシリアル化できません。
いくつかのシリアライズ可能なルール/ヒントについては、これを参照してください: http://www.xyzws.com/Javafaq/what-are-rules-of-serialization-in-Java/208
のようなサブフォルダーなど、ユーザー ディレクトリに書き込むほうがよいのではないでしょ.myApp/
うか。
ディレクトリをセットアップ/初期化するには、次のようにします。
File userDir = new File(System.getProperty("user.home"));
File storageDir = new File(userDir, ".myApp");
if (!storageDir.exists())
storageDir.mkdir();
// store your file in storageDir
が通常どこにあるかを確認するには、ここを参照してくださいuserDir
(必ずしも気にする必要はありません)。
Eclipse を無視して、ディレクトリ (およびその中のファイル) をプログラムまたは手動で作成できます。
次に、Eclipse でプロジェクト エクスプローラー ビューを更新すると、ディレクトリとファイルがビューの一部になります。