プログラムのディレクトリとは異なるディレクトリに (それぞれ) テキスト ファイルを読み書きしようとしています。書き込みまたは読み取りを行うディレクトリを指定する場合、ファイル パスを識別するためにスラッシュまたはバックスラッシュを使用する必要がありますか?
4 に答える
スラッシュを使用すると、システムに依存しなくなります。簡単にするために、私はそれに固執します。
java.io.File.separator
ユーザーへのパスを表示する場合は、使用を検討してください。Windows ユーザーを驚かせたくないでしょう。彼らはびくびくしています。
どこにも文書化されていませんが、JDK クラスでは、Windows を使用しているかどうかに関係なく、スラッシュを使用できます。(これは JDK ソースで確認できます。ここでは、明示的にパス区切り記号を変換しています。)
公式には、そしてもちろんあなたが行っているどのUIでも、file.separator
システムプロパティを使用する必要がありSystem.getProperty
ます.System.getProperties
String sep = System.getProperty("file.separator");
...そしてフィールド経由でも(および)static
としても利用できます。File.separator
File.separatorChar
クラスのさまざまな機能を使用して、パスを結合および分割したり、 のインターフェイスやクラスのさまざまjava.io.File
な機能を使用したりすることもできますjava.nio.file
。
どちらでも使用できます。
を使用する場合/
は、単一のスラッシュのみが必要です。
を使用する場合は\
、使用する必要があります\\
。つまり、それをエスケープする必要があります。
resolve()
クラスのメソッドを使用しjava.nio.Path
て、ディレクトリ/ファイルを既存のパスに追加することもできます。これにより、スラッシュまたはバックスラッシュを使用する手間が省けます。toAbsolutePath()
その後、メソッドを呼び出してから絶対パスを取得できます。toString()
SSCCE:
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathSeperator {
public static void main(String[] args) {
// the path seperator for this system
String pathSep = System.getProperty("path.separator");
// my home directory
Path homeDir = Paths.get(System.getProperty("user.home"));
// lets print them
System.out.println("Path Sep: " + pathSep);
System.out.println(homeDir.toAbsolutePath());
// as it turns out, on my linux it is a colon
// and Java is using forward slash internally
// lets add some more directories to the user.home
homeDir = homeDir.resolve("eclipse").resolve("configuration");
System.out.println("Appending more directories using resolve()");
System.out.println(homeDir);
}
}
/を使用する必要があります
たとえば、C:/User/...