web-dev-qa-db-ja.com

JavaファイルパスWindows / Linux

Javaでファイルパスを作成するための最良の解決策は何ですか。アプリケーションはこのosに使用されます。私はユニバーサル文字列を作成する必要があります。

例:Linuxの場合:

public File folderTxt = new File("/home/romankooo/work/txt/");

Windowsの場合:

public File folderTxt = new File("C:\\PDFMalwareDataAnalyser\\Txt\\");

または、このOS用に2つの.jarファイルを生成するための最良のソリューションです。

たくさんの人に感謝します。

10
bilinxe

最良のことは、Javaにこのように決定させることです

    public File folderTxt = new File(File.separator + "home" + File.separator + "romankooo" + File.separator + "work" + File.separator + "txt" + File.separator);
25
microtone

スラッシュ文字を両方のOSのファイル区切りとして使用できます。つまり、C:/PDFMalwareDataAnalyser/Txt/の代わりにC:\\PDFMalwareDataAnalyser\\Txt\\を使用して、Windows OSでも機能します。

6
Nicolas Filotto

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;
}
2
Rudziankoŭ

このコード行を試してください。文字列のリターンに従って、コードを調整できます

System.getproperty("os.name");
1

個人的には、システムプロパティでフォルダを渡すほうがよいと思います。

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();
}
0
Janos Vinceller