Javaでファイルパスを作成するための最良の解決策は何ですか。アプリケーションはこのosに使用されます。私はユニバーサル文字列を作成する必要があります。
例:Linuxの場合:
public File folderTxt = new File("/home/romankooo/work/txt/");
Windowsの場合:
public File folderTxt = new File("C:\\PDFMalwareDataAnalyser\\Txt\\");
または、このOS用に2つの.jarファイルを生成するための最良のソリューションです。
たくさんの人に感謝します。
最良のことは、Javaにこのように決定させることです
public File folderTxt = new File(File.separator + "home" + File.separator + "romankooo" + File.separator + "work" + File.separator + "txt" + File.separator);
スラッシュ文字を両方のOSのファイル区切りとして使用できます。つまり、C:/PDFMalwareDataAnalyser/Txt/
の代わりにC:\\PDFMalwareDataAnalyser\\Txt\\
を使用して、Windows OSでも機能します。
OS名を取得するにはSystem.getProperty("os.name")
を使用します。これは、リソースへのパスの設定に依存します。
String resourcePath = null;
switch (System.getProperty("os.name")) {
case "Linux": resourcePath = "/home/romankooo/work/txt/";
break;
case "Windows": resourcePath = "C:\\PDFMalwareDataAnalyser\\Txt\\";
break;
}
このコード行を試してください。文字列のリターンに従って、コードを調整できます
System.getproperty("os.name");
個人的には、システムプロパティでフォルダを渡すほうがよいと思います。
Java -Dfolder = C:\ PDFMalwareDataAnalyser\Txt\myapp
これは次のように使用できます:
public File folderTxt = new File(System.getProperty("folderTxt"));
または、プログラムの引数でフォルダを渡します。
Java myapp C:\ PDFMalwareDataAnalyser\Txt \
そして、次のように使用します。
public File folderTxt = new File(args[1]);
ただし、コードで定数を使用する場合は、次のように使用できます。
public File folderTxt = new File(String.join(File.separator,"C:","PDFMalwareDataAnalyser","Txt"));
または、これの新しいバージョンは次のようになります:
public File folderTxt = new File(Paths.get("C:","PDFMalwareDataAnalyser","Txt").toString());
または、プロパティファイルを読み取って、そのファイルにパスを保存することもできます。これはさまざまなOSで機能します。前にプロパティファイルを作成するだけで済みます。
String propertyFileName = String.format("folderSettings-%s.properties", System.getProperty("os.name").replaceAll(" ","_"));
Properties p = new Properties();
try (InputStream is = getClass().getResourceAsStream(propertyFileName))
{
p.load(is);
String folderName = p.getProperty("folderName");
folderTxt = new File(folderName);
}
catch (Exception e)
{
// log if error occurs...
e.printStackTrace();
}