コンテンツへスキップ

Java 25: Windowsファイル操作の変更点 – 開発者必見の新機能!

Java 25 Update: Major Changes to Windows File Operations

Javaの世界にちょっぴり変化?Windowsでのファイル操作が新しくなるってホント?

みなさん、こんにちは!複雑なテクノロジーの世界も、あなたの知りたい!にこたえるジョンです。普段何気なく使っているパソコンやスマートフォン、その裏側ではたくさんのプログラムが一生懸命動いています。今日は、そんなプログラムを作るための代表的な「言語」のひとつ、Java(ジャバ) にまつわる、ちょっとした、でも大切なニュースをお届けします。

「Javaって何?」という方もいらっしゃるかもしれませんね。Javaは、ウェブサイトの裏側で動くシステムから、皆さんがお使いのAndroidスマートフォンのアプリ、さらには大きな会社の重要なシステムまで、本当にいろいろなところで活躍しているプログラミング言語なんです。そんなJavaも、より良くなるために時々アップデートされるんですよ。

そして今回、2024年9月に登場予定の新しい「Java 25」では、特にWindowsパソコンでJavaプログラムがファイルを扱うまわりの動作が、いくつか変わる予定なんです。なんだか難しそう?大丈夫です、いつものように、わかりやすーく解説していきますね!

変更点1:「読み取り専用ファイル」をJavaが勝手に消せなくなる?

まず一つ目の変更点は、ファイルの種類の中でも「読み取り専用」と設定されたファイルの扱いです。

「読み取り専用ファイル」ってなぁに?
これは、その名の通り「読むこと(中身を見ること)はできるけれど、間違って内容を書き換えたり、うっかり消してしまったりできないように保護されたファイル」のことです。大切な設定ファイルなどが、これになっていることがありますね。

これまでのJavaだと…
以前のバージョンのJavaでは、プログラムが「このファイルを消して!」(専門用語でいうと File.delete という命令です)とお願いすると、たとえそのファイルが「読み取り専用」でも、Javaが気を利かせて「読み取り専用」の設定を一時的に解除してから、ファイルを削除してくれていました。賢い!…と思いきや、実はここに小さな落とし穴があったんです。

何が問題だったの?
「読み取り専用を解除する」という作業と、「ファイルを削除する」という作業は、Javaの内部では別々のステップとして処理されます。そのため、ごくまれにですが、解除した直後に何らかの理由(タイミングの問題など)で削除がうまくいかないと、「読み取り専用ではなくなった(つまり保護が解けた)ファイルが、消されずに残ってしまう…」なんてことが起こり得たのです。これは意図しない結果ですよね。

Java 25 からはどう変わるの?
そこで、新しいJava 25では、Windows上で「読み取り専用」と設定されているファイルに対して削除命令(File.delete)が出された場合、Javaはもう勝手に読み取り専用を解除しません。代わりに、「このファイルは読み取り専用なので削除できませんよ」という意味で、処理が失敗したことを示す情報(falseという値)をプログラムに返すようになります。より安全で、正直な動きになったと言えるかもしれませんね。

「どうしても昔の動きがいい!」という開発者のために
もちろん、これまでの動きを前提に作られたプログラムもあるかもしれません。そんな開発者の方向けに、Javaを動かすときに特別な設定(システムプロパティといって、-Djdk.io.File.allowDeleteReadOnlyFiles=true という呪文のようなものを指定します)をすることで、以前のように読み取り専用属性を解除してから削除する動きに戻すことも可能だそうです。柔軟性も残されているのは良いことですね!

変更点2:ファイル名やフォルダ名の「最後のスペース」に厳しくなる!

二つ目の大きな変更点は、ファイル名やフォルダ名の最後にうっかり入ってしまいがちな「スペース(空白文字)」の扱いです。

「最後のスペース」って?
例えば、「大事な書類 」のように、ファイル名やフォルダ名の終わりにスペースキーで空白が入ってしまっている状態のことです。見た目では気づきにくいこともありますよね。

Windowsではちょっと困る「最後のスペース」
実は、WindowsというOS(パソコンを動かす基本ソフトのことです)は、ファイル名やフォルダ名の「最後にあるスペース」を、正式な名前の一部として扱わないことが多いんです。ちょっと特殊なルールですね。そのため、Javaプログラムが「最後にスペースが付いた名前」でファイルやフォルダを作ろうとしたり、操作しようとしたりすると、意図しない動きをすることがありました。

これまでのJavaだと…
以前のJavaでは、こうした「最後にスペースが付いた不正な名前」でファイル操作をしようとすると、本当はWindowsのルール上うまくいかないはずなのに、プログラム上では「成功したように見えてしまう」ことがありました。例えば、フォルダを作る命令(File::mkdirなど)を実行しても実際にはフォルダが作られていないのに、プログラムには「失敗したよ」と正しく伝わらなかったり、新しいファイルを作る命令(File::createNewFileなど)でエラーが出るべきなのに出なかったり…。これは後で問題を引き起こす可能性がありました。

Java 25 からはどう変わるの?
Java 25からは、Windows上でこうした「最後にスペースが付いた名前」のパス(ファイルの場所を示す住所のようなもの)を使ってファイル操作をしようとすると、一貫して「その名前はWindowsでは扱えませんよ」とエラーや失敗を報告してくれるようになります。
具体的には、

  • フォルダを作ろうとする命令(File::mkdirなど)は、きちんと「失敗」を意味するfalseという値を返すようになります。
  • 新しいファイルを作ろうとする命令(File::createNewFileなど)は、「入出力エラー」(専門用語でIOExceptionといいます)を発生させるようになります。

これにより、プログラムを作る人たちは「あ、この名前の付け方はWindowsではダメなんだな」とすぐに気づけるようになり、より安定したプログラムを作りやすくなるというわけです。

なぜこんな変更が行われるの?

こうした変更は、Javaを開発しているOracle(オラクル)社によると、「品質向上のための取り組み(quality outreach)」の一環なのだそうです。なんだかカッコイイ響きですね!

つまり、JavaがWindowsという特定の環境で動くときに、よりWindowsのルールに沿った、より予測可能で、より安定した動きをするようにするための改善、ということなんです。地味に聞こえるかもしれませんが、たくさんのプログラムの土台となっているJavaにとっては、とても大切なことなんですよ。

Java 25 はいつ頃やってくる?

今回ご紹介した変更が含まれる「Java 25」ですが、これは「JDK 25(ジェイディーケイ25)」という形で提供されます。「JDK」というのは、Java Development Kitの略で、Javaでプログラムを開発するための道具一式のことだと思ってください。

そして、このJDK 25は、「LTS(Long-Term Support)リリース」、つまり「長期サポート版」として提供される予定です。LTS版というのは、長期間にわたってセキュリティアップデートなどが提供される、いわば「安心して長く使えるバージョンですよ」という印。多くの企業や開発者にとって、LTS版は重要な選択肢になります。

気になるリリース予定日は、2024年9月16日 とのこと。もうすぐですね!

ジョンからのひとこと

今回のJavaの変更点、いかがでしたか?
私たちエンドユーザーが直接「わ、ファイルの動きが変わった!」と毎日感じるような大きな変化ではないかもしれません。でも、Javaで作られた数えきれないほどのソフトウェアやサービスが、より安定して、より正しく動くようになるための、まさに「縁の下の力持ち」的な改善なんですよね。こういう一つ一つの丁寧な積み重ねが、私たちのデジタルライフを支える技術の信頼性を高めていくんだなあと、改めて感じ入りました。

この記事は、以下の元記事をもとに筆者の視点でまとめたものです:
Java 25 to change Windows file operation behaviors

関連投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です