Fileクラス
パス区切り文字
パス区切り文字は "/" がオススメです。
/
目次
1.パス区切り文字
パス区切り文字は、Windows、Linux でそれぞれ以下のように決まっています。
| OS |
パス区切り文字 |
文字リテラル |
文字コード |
| Windows |
\ 又は ¥ |
'\\' 又は '¥¥' |
0x5c |
| Linux |
/ |
'/' |
0x2f |
2.スラッシュを使ったサンプルコード
少し実験してみます。
パス区切り文字を含む文字列を与えてみましょう。
与えた区切り文字は
「/」(スラッシュ)だ。
//Sample02_01.java
import java.io.File;
class Sample02_01{
public static void main(String[] args){
File file = new File("dir01/pathname.txt");
String strPath = file.getPath();
System.out.println(strPath);
}
}
このサンプルコードの結果は、Windows と Linux で異なる文字列が表示されます。
Linux は
「/」(スラッシュ)のままね。
コマンドライン Linux の場合
>cd ws
ws>javac Sample02_01.java
ws>java Sample02_01
dir01/pathname.txt
あれ?
Windowsでは
「¥」(円マーク)になった!
コマンドライン Windows の場合
>cd ws
ws>javac Sample02_01.java
ws>java Sample02_01
dir01¥pathname.txt
そう。
「¥」(円マーク)は
「\」(バックスラッシュ)と同じ文字だ。
でも「/」(スラッシュ)とは別物だ。
書き換えられてる!!
これは、Windows版のJDK特有の機能です。
Fileクラスのコンストラクタにあった normalizeメソッドの影響です。
normalizeメソッドは、文字列がパスとして適切になるように、少しだけ補正をします。
Windows版のJDKの気持ち
「/」(スラッシュ)で区切ってるけど
これはきっと「¥」(円マーク)のことだな。
気を利かせてに直しておこう。
文字は置き換えられてしまいましたが、パスが表す意味は、Windows、Linux どちらの場合も、
dir01ディレクトリにある、「pathname.txt」 というファイルと解釈されます。
WindowsのJDKは、
文字列を調整して、
パスとしての意味を保ったんだ。
それで「/」がオススメなんスね?
3.バックスラッシュはお勧めできない
「
\」(バックスラッシュ)をパス区切り文字に使用するのは
あまりお勧めではないのですが、どんな感じか見ておきましょう。
Sample02_02 では、説明のため、「File.
createNewFile()メソッド」を使用しています。
まだ学習していないメソッドですが、ファイルを作成するメソッドです。
ご参照↓
createNewFileメソッド
//Sample02_02.java
import java.io.File;
import java.io.IOException;
class Sample02_02{
public static void main(String[] args){
File file = new File("dir01\\pathname.txt");
String strPath = file.getPath();
System.out.println(strPath);
try{
file.createNewFile(); //ファイルを作成するメソッドです
}catch(IOException e){
System.out.println(e);
}
}
}
このサンプルコードは、Windows と Linux で同じ文字列が出力されますが、意味が異なります。
コマンドライン Windows の場合
>cd ws
ws>javac -encoding UTF-8 Sample02_02.java
ws>java Sample02_02
dir01¥pathname.txt
dir01ディレクトリにある、「pathname.txt」 というファイルと解釈されます。
wsディレクトリ内に、dir01ディレクトリをあらかじめ作成しておいてください。
Windowsの「dir01\pathname.txt」
コマンドライン Linux の場合
>cd ws
ws>javac Sample02_02.java
ws>java Sample02_02
dir01\pathname.txt
「dir01\pathname.txt」 というファイルと解釈されます。
Linuxの「dir01\pathname.txt」
Linux で「\」は
区切り文字ではないわ。
げっ!
重要
パスの中の
「\」バックスラッシュは
ファイルシステムによって扱いが異なります。
異なる環境での動作を念頭に置いて、
パス区切り文字は「/」(スラッシュ)に統一しておいた方がいいでしょう。
お疲れ様でした。
Windows は、多くの場合「/」も利用できます。