パス区切り文字は "/" がオススメ - 萌えJava超入門
Fileクラス

パス区切り文字

パス区切り文字は "/" がオススメです。

/

目次

1.パス区切り文字


パス区切り文字は、Windows、Linux でそれぞれ以下のように決まっています。

OS パス区切り文字 文字リテラル 文字コード
Windows \ 又は ¥ '\\' 又は '¥¥' 0x5c
Linux / '/' 0x2f
¥\ は同じ文字です。
Windows は、多くの場合「/」も利用できます。

2.スラッシュを使ったサンプルコード

少し実験してみます。
パス区切り文字を含む文字列を与えてみましょう。

萌えJava超入門
与えた区切り文字は 「/」(スラッシュ)だ。
//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 で異なる文字列が表示されます。

萌えJava超入門
Linux は
/」(スラッシュ)のままね。
コマンドライン Linux の場合
>cd ws
ws>javac Sample02_01.java
ws>java Sample02_01
  dir01/pathname.txt

萌えJava超入門
あれ?
Windowsでは
¥」(円マーク)になった!
コマンドライン Windows の場合
>cd ws
ws>javac Sample02_01.java
ws>java Sample02_01
  dir01¥pathname.txt

萌えJava超入門
そう。
¥」(円マーク)は
\」(バックスラッシュ)と同じ文字だ。
でも「/」(スラッシュ)とは別物だ。
萌えJava超入門 萌えJava超入門
書き換えられてる!!

これは、Windows版のJDK特有の機能です。
Fileクラスのコンストラクタにあった normalizeメソッドの影響です。
normalizeメソッドは、文字列がパスとして適切になるように、少しだけ補正をします。
内部で呼び出される FileSystemクラスが、Windows と Linux で異なります。


Windows版のJDKの気持ち
/」(スラッシュ)で区切ってるけど
これはきっと「¥」(円マーク)のことだな。
気を利かせてに直しておこう。

文字は置き換えられてしまいましたが、パスが表す意味は、Windows、Linux どちらの場合も、
dir01ディレクトリにある、「pathname.txt」
というファイルと解釈されます。

萌えJava超入門
WindowsのJDKは、
文字列を調整して、
パスとしての意味を保ったんだ。
萌えJava超入門 萌えJava超入門
それで「/」がオススメなんスね?


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の場合

コマンドライン 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」
delimit_linux_bkslash




Linux の場合

コマンドライン Linux の場合
>cd ws
ws>javac Sample02_02.java
ws>java Sample02_02
  dir01\pathname.txt

「dir01\pathname.txt」 というファイルと解釈されます。
Linuxの「dir01\pathname.txt」
delimit_linux_bkslash

萌えJava超入門
Linux で「\」は
区切り文字ではないわ。



萌えJava超入門
げっ!
萌えJava超入門


重要
パスの中の 「\」バックスラッシュは
   ファイルシステムによって扱いが異なります。
異なる環境での動作を念頭に置いて、
   パス区切り文字は「/」(スラッシュ)に統一しておいた方がいいでしょう。




お疲れ様でした。




© 2019 awasekagami