質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1588閲覧

FileReaderでファイルが読み込めません(Java)

k_java_beginner

総合スコア12

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/06/24 02:14

前提

Spting bootを利用したプロジェクトで、
プロジェクトフォルダ内のファイルをFileReaderで読み込みたいのですが、
FileNotFoundExceptionが表示されてしまいます。

実現したいこと

プロジェクトフォルダ内のファイルをFileReaderで問題なく読み込みたい

発生している問題・エラーメッセージ

Unhandled exception type FileNotFoundExceptionJava(16777384)

該当のソースコード

Java

1package net.digskill.tweet_spring; 2 3import java.io.File; 4import java.io.FileReader; 5import org.springframework.boot.SpringApplication; 6import org.springframework.boot.autoconfigure.SpringBootApplication; 7 8@SpringBootApplication 9public class TweetSpringApplication { 10 public static void main(String[] args) { 11 SpringApplication.run(TweetSpringApplication.class, args); 12 13 File file = new File("/Users/******(自分の名前が入っています)/Desktop/digskill/workspace_java_springboot/tweet_spring/src/main/resources/files/pn.csv.m3.120408.trim"); 14 FileReader fileReader = new FileReader(file); //ここの右辺部分に赤い波線が引かれ、エラーメッセージが出ています。 15 } 16} 17
. ├── main │ ├── java │ │ ├── net │ │ │ ├── digskill │ │ │ │ ├── tweet_spring │ │ │ │ │ ├── config │ │ │ │ │ │ └── WebSecurityConfig.java │ │ │ │ │ ├── controller │ │ │ │ │ │ ├── AnalyticsController.java │ │ │ │ │ │ ├── AuthController.java │ │ │ │ │ │ ├── IndexController.java │ │ │ │ │ │ └── TweetController.java │ │ │ │ │ ├── entity │ │ │ │ │ │ ├── Tweet.java │ │ │ │ │ │ └── User.java │ │ │ │ │ ├── form │ │ │ │ │ │ └── UserForm.java │ │ │ │ │ ├── repository │ │ │ │ │ │ ├── TweetRepository.java │ │ │ │ │ │ └── UserRepository.java │ │ │ │ │ ├── service │ │ │ │ │ │ ├── AnalyticsService.java │ │ │ │ │ │ ├── TweetService.java │ │ │ │ │ │ └── UserService.java │ │ │ │ │ ├── utility │ │ │ │ │ │ └── LocalDateTimeFormatter.java │ │ │ │ │ ├── .DS_Store │ │ │ │ │ └── TweetSpringApplication.java(←今回の実行ファイル) │ │ │ │ └── .DS_Store │ │ │ └── .DS_Store │ │ └── .DS_Store │ ├── resources │ │ ├── files │ │ │ └── pn.csv.m3.120408.trim(←読み込みたいファイル) │ │ ├── static │ │ │ ├── css │ │ │ │ └── style.css │ │ │ └── .DS_Store │ │ ├── templates │ │ │ ├── analytics │ │ │ │ └── analytics.html │ │ │ ├── auth │ │ │ │ ├── login.html │ │ │ │ └── register.html │ │ │ ├── edit │ │ │ │ └── edit.html │ │ │ ├── edit_profile │ │ │ │ └── edit_profile.html │ │ │ ├── layout │ │ │ │ ├── footer.html │ │ │ │ ├── header.html │ │ │ │ └── layout.html │ │ │ ├── mypage │ │ │ │ └── mypage.html │ │ │ └── top │ │ │ └── top.html │ │ ├── .DS_Store │ │ └── application.yml │ └── .DS_Store ├── test │ └── java │ └── net │ └── digskill │ └── tweet_spring │ └── TweetSpringApplicationTests.java └── .DS_Store

試したこと

・file.exists();でファイルの存在を検証
→上記ソースコード内の絶対パスを指定した時のみtrueが返ってきました。
しかし、FileReaderはエラーのままです。
他に、相対パス("src/main/resources/files/pn.csv.m3.120408.trim")、ファイル名のみ("pn.csv.m3.120408.trim")でも試してみたのですが、いずれもfile.exists()はfalseと出ました。

・ファイルの配置を変えてみる
→プロジェクトフォルダ外に配置したときには、絶対パスで指定するとfile.exists()がtrueになるものの、FileReaderのエラーは消えず
→同じ階層(tweet_spring直下)に配置した際には、絶対パス・相対パスいずれの指定でもfile.exists()はtrue、しかしFileReaderはエラーのままです。

・別のファイルで試してみる
ファイル自体に問題がある可能性を考え、test.txtファイルを作成し、プロジェクトフォルダ内同階層、プロジェクトフォルダ内のfilesディレクトリ直下、プロジェクトフォルダ外(デスクトップ)などに配置してみましたが、いずれも読み込めませんでした。

補足情報(FW/ツールのバージョンなど)

openjdk version "17.0.3" 2022-04-19
springframework.boot version '2.7.0'
VS Code 1.65.0

おそらく基礎的な部分で重大な誤解をしていると思います。
初歩的な質問で大変恐縮なのですが、どなたかご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

実行環境により、カレントディレクトリが異なっているからでしょう。
ファイルにアクセスする直前あたりで、カレントディレクトリがどこなのか、確認してみてはいかがかと。

java

1 System.out.println(new File(".").getAbsolutePath());

追記。

もう一度下記相対パスを入れてfile.exists()を試したところtrueになったため、パスの指定自体は解決したようです。
src/main/resources/files/pn.csv.m3.120408.trim
しかし、それでもなおFileReaderでFileNotFoundエラーが出てしまっております、、、
他にも心当たりがございましたらよろしくお願いいたしますm(_ _ )m

file.exists() == true。ファイルが存在するのに、FileNotFoundですか。意味不明ですなぁ。

src/main/resources/files/pn.csv.m3.120408.trim

対象は、リソースファイルですか。

リソースファイルであれば、Class#getResourceAsStream()を使うのが筋でしょう。

java

1 final InputStream is = this.getClass().getResourceAsStream("/files/pn.csv.m3.120408.trim"); 2 final Reader reader = new InputStreamReader(is);

投稿2022/06/24 02:51

編集2022/06/24 04:23
shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_java_beginner

2022/06/24 03:22

shiketaさん、ご回答ありがとうございます。 実行ファイル(TweetSpringApplication.java)にて教えていただいたコードを貼って実行してみたところ、 /Users/********(自分の名前)/Desktop/digskill/workspace_java_springboot/tweet_spring/. との表示でした。もう一度下記相対パスを入れてfile.exists()を試したところtrueになったため、パスの指定自体は解決したようです。 src/main/resources/files/pn.csv.m3.120408.trim しかし、それでもなおFileReaderでFileNotFoundエラーが出てしまっております、、、 他にも心当たりがございましたらよろしくお願いいたしますm(_ _ )m
k_java_beginner

2022/06/24 07:24

shiketaさん、追記ありがとうございます。 無事に解決できました! streamとして読み込むという点、学びになりました。 FileInputStreamでも読み込めたので、色々な記法を試してみます。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問