この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-05-13 03:57:04

タイトル: java.io.FileNotFoundException: ファイル名 (許可がありません)
SEOタイトル: java.io.FileNotFoundException 許可がありません の原因と対処

この記事の要点
  • Java で java.io.FileNotFoundException: ... (許可がありません) が出るときの対処
  • 原因: ファイル本体は存在するが、実行ユーザーに読み書き権限がない
  • 対処: ls -l で所有者・パーミッションを確認 → chmod / chown で調整
  • Web サーバー経由ならtomcat / apache / nginx のユーザー権限であることを意識する
  • 親ディレクトリにも実行(x)権限が必要

 

エラー内容

java.io.FileNotFoundException: ファイル名 (許可がありません)

Javaで FileInputStreamFileOutputStreamFiles.newInputStream 等でファイルを開こうとしたときに、実行ユーザーに読み取り(または書き込み)の権限がない場合に発生する例外です。メッセージ末尾が「(許可がありません)」になっているのが目印で、「ファイルが存在しない」エラーとは別物です。

発生条件 / 原因

  • 対象ファイルまたは親ディレクトリの読み取り・書き込み権限がプロセスユーザーに無い
  • 対象が他ユーザー所有で、グループ・other に権限が付与されていない
  • 書き込み先のディレクトリ自体に書き込み権限が無い(新規ファイル作成時)
  • SELinux や AppArmor などで遮断されている
  • Webサーバー(apache/nginx/tomcat ユーザー)から実行しており、開発者ユーザーとは異なる

対処法

1. 現在の権限と所有者を確認する

$ ls -l /path/to/file

所有者・グループ・パーミッション(rwxrwxrwx) を確認します。

2. 実行ユーザーを確認する

$ whoami
$ id

3. 権限を付与する

所有者を実行ユーザーに変更する場合:

$ sudo chown 実行ユーザー /path/to/file

読み取りだけ付与する場合:

$ chmod +r /path/to/file

書き込みも必要なら:

$ chmod u+rw /path/to/file

4. 親ディレクトリの実行権限を確認

ファイルにアクセスするには、親ディレクトリにも実行(x)権限が必要です。

$ ls -ld /path/to/

注意点

  • 本番環境ではむやみに 777 にせず、必要最小限の権限で付与する
  • Webサーバー経由(servlet/jsp/Tomcat等)の場合は、Webサーバープロセスのユーザー権限であることが多い
  • Windows環境では「アクセスが拒否されました」(Access is denied) と表示されることがあるが、本質は同じパーミッション問題
  • 本当にファイルが存在しない場合は、メッセージが「(そのようなファイルやディレクトリはありません)」になる