Fileクラスに関連した基礎知識 - 萌えJava超入門
Fileクラス

Fileクラスに関連した基礎知識

Fileクラスの前にちょっとおさらいしましょう。


目次

1.Fileクラスの説明に使う言葉です。


萌えJava超入門 萌えJava超入門 萌えJava超入門
準備運動と思って
気楽に行こう。


ディレクトリ

 フォルダともいいますね。
 ご存知、ファイルを入れておく入れ物のような概念です。

サブディレクトリ

 ディレクトリの中にあるディレクトリの事です。

カレントディレクトリ

 今現在作業しているディレクトリの事です。
 コマンドラインでは、コマンドプロンプトの左側に表示されています。
   ご参照↓
   第〇章 知っておいてほしい言葉
    1.コマンドラインの画面説明

ルートディレクトリ

 単に ルート ということもあります。
 最上位のディレクトリを指します。
Windowsc: などのドライブ名。 (「Cドライブ直下」と表現することも)
Linux / (ルート)

ホームディレクトリ

 複数のユーザが使用することを想定したコンピュータにおいて、ユーザごとに割り当てられたディレクトリのことです。
 ユーザが自由にファイルやサブディレクトリを作成したり、保存したりできます。
 一般にユーザー名と同名で、ログインしたユーザーの最初のカレントディレクトリになります。
例: Windows c:\Users\[ユーザー名]
例: Linux /home/[ユーザー名]

パス

 ディレクトリやファイルの場所を示す文字列をパスといいます。
 上層のディレクトリから、「パス区切り文字」で区切って、
 目的のディレクトリやファイルまでの経路を示します。
例(絶対パス): Windows c:\Users\user01\sample.txt
例(絶対パス): Linux /home/user01/sample.txt

パス区切り文字

 パスを記述する上で、上層のディレクトリと、
 下層のディレクトリやファイルの間を仕切る文字のことです。
Windowsでは\(多くの場合「/」も利用できます。)
Linux では/」です。

ファイルシステム

 OSが持つ「ディレクトリやファイルを管理する機能」を指します。
 Windowsのファイルシステムは、主に「FAT32」や「NTFS」です。
 Linuxのファイルシステムは、「ex4」が主流でしょう。
 パス区切り文字やルートディレクトリの記述が、Windows と Linux で異なるのは
 ファイルシステムの違いによるものです。

絶対パス

 ルートディレクトリからの経路を示すパスの書き方です。

相対パス

 カレントディレクトリからの経路を示すパスの書き方です。
   一つ上のディレクトリ 「..」
   カレントディレクトリ  「.」
 のような表現もよく使われます。

   ご参照↓
   第〇章 知っておいてほしい言葉
     2. cdコマンド




萌えJava超入門
Linux では
パスの先頭文字が「/」なら絶対パス。
そうでなければ相対パスとして
扱われるわ。
萌えJava超入門
萌えJava超入門
Windowsの場合は、
ドライブっぽい「c:」とか
ローカルネットワークっぽく
「\\」で始まる文字列が絶対パスとされる。
書き手の気持ちは割と通じる。


2.バックスラッシュと円マーク


バックスラッシュ円マーク

バックスラッシュ円マーク は同じもの

Windowsのパス区切り文字は「バックスラッシュ」(バックスラッシュ)とご紹介いたしました。
バックスラッシュは、日本語キーボードの場合「」のキーで入力できます。
ところが、実際にWindowsのメモ帳(notepad.exe)で「ろ」を直接入力モードで入力すると、
円マーク」と表示されます。
驚くべきことに、これは「仕様」です。
文字化けとはちょっと違います。
萌えJava超入門 萌えJava超入門 萌えJava超入門   

円マーク」と表示されたり、 「バックスラッシュ」と表示されたりするこの文字は、
どちらも同じ文字コード「0x5c」です。
どう表示されていようとも、同じものです。

どうしてこうなった?!

ASCIIコードは様々な文字コードでも共通する部分で、文字化けしにくいとご説明申し上げましたが、
以下の部分は国や地域の事情に応じて改編することが認められていました。

改編することが認められている部分
ASCII JIS X 0201-1976
0x23# 
0x24$ 
0x40@ 
0x5B[ 
0x5c バックスラッシュ 円マーク
0x5D] 
0x5E^ 
0x7B{ 
0x7C| 
0x7D} 
0x7E~
  比較↓
  ASCIIコード表

萌えJava超入門
ずっと昔、
コンピュータで使える文字が
英数字、記号、半角カタカナ位しか
無かったころの話だな。

日本では、JIS X 0201-1976 が制定された際に、「0x5C」と「0x7E」に、独自の文字を割り当てました。
日本で「円マーク」が使えないのは致命的ですものね。
文字コードを取り違えて化けるのではなく、 正式に登録されている文字が表示されているのです。

日本語環境の「0x5C」

日本語仕様の Windowsは、Shift-JIS 由来の独自の文字コード MS932 を使用するので、
文字コード「0x5C」は、「円マーク」と表示されます。
Linux は、Unicode UTF-8 なので、ASCIIと同じ「バックスラッシュ」の表示です。
Webではページごとに設定されていますが、UTF-8 が多いので「バックスラッシュ」と表示される事が多いでしょう。
このページも UTF-8 なので、「バックスラッシュ」と表示されていると思います。

ちなみに、UTF-8 での円マークは「0xC2A5」に別途登録されています。
ASCIIコードの範囲外ですね。

キーボード右上の「円マーク」キーは危険

少し細かい話ですが、「ろ」の他に、キーボード右上の「円マーク」キーでも「0x5C」が入力できます。
ところが、この右上のキーは、ごく限られた条件で「0x5C」のはずが、UTF-8 での円マーク「0xC2A5」になってしまう事があるようです。

Javaのソースコードでは、パス区切り文字を入力する際に、キーボード右下の「」を使用した方が無難でしょう。

Shift-JISのテキストファイルをWindows、Linuxの双方で編集した場合に発生する事があるようです。



3.パスに関連する Javaでのお作法


Javaでは、プラットフォームが異なっても同じように動作する事を基本理念としています。
プログラムを記述する上でも、Windows、Linux のどちらでも動作するように 配慮するのが望ましいです。

萌えJava超入門 萌えJava超入門
え"~?!
だって
Windows と Linux は
パスの書き方がちがうって...。
萌えJava超入門
ザックリこんな感じにすると
上手く動作するぞ。
心の片隅に置いといてくれ。


今の時点で過度に意識する必要はありませんが、この章では以下の様な配慮をしてサンプルコードを作成しています。

  1. パスの区切り文字は「/」を使用しましょう。
  2. Windows版JDKのFileクラスは、「/」を「\」と自動的に読み替えます。
      *Fileクラス内の FileSystem.normalizeメソッドの効果です。

  3. ファイルシステムから取得したパスの処理について
  4. 受け取ったパスを、文字列として編集する場合には、
    String.replaseメソッドなどで、「\」を「/」に
    置き換えるといいでしょう。

  5. なるべく相対パスを使いましょう。

  6. 相対パスの先頭にパスの区切り文字を付けません。

  7. System.getPropertiesメソッドの利用
  8. 絶対パスが必要な場合には、直接文字列リテラルを使用せずに、
    System.getPropertiesメソッドを利用する方法があります。


萌えJava超入門
パスの区切り文字は「/」がスタンダードなのよ。
MS-DOS が区切文字に「\」を採用しちゃったのが
面倒の発端なんだから。
Unicode YEN SIGN 問題
萌えJava超入門
萌えJava超入門
とりあえず
/」で相対パスを使えばいいんすね。




萌えJava超入門
Javaのスローガンは
「Write once, run anywhere」だ。
プラットフォームに依存しない特徴を
意識できるとクールだな。


お疲れ様でした。




© 2019 awasekagami