Java FileInputStreamでテキストファイルが読み込めない
- 評価
- クリップ 0
- VIEW 697

退会済みユーザー
お知恵をおかしください
前提・実現したいこと
Eclipseを使用
"names"とい名前でメモ帳を作成
<実現させたこと>
Windowsのメモ帳のテキストファイルに記載されている名前を読み込んで出現回数を表示するプログラムを作っております。
とりあえずはnames.txtというファイルを読み込んで表示させたい。
発生している問題・エラーメッセージ
he specified file not foundjava.io.FileNotFoundException: C:\JavaAssignment\names.text (指定されたファイルが見つかりません。)
該当のソースコード
言語名:Java
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Assignment5 {
public static void main(String[] args) {
System.out.println("<出現回数>");
//Specify the path of the file here
File file = new File("C:\\JavaAssignment\\names.text");
BufferedInputStream bis = null;
FileInputStream fis= null;
try
{
//FileInputStream to read the file
fis = new FileInputStream(file);
/*Passed the FileInputStream to BufferedInputStream
*For Fast read using the buffer array.*/
bis = new BufferedInputStream(fis);
/*available() method of BufferedInputStream
* returns 0 when there are no more bytes
* present in the file to be read*/
while( bis.available() > 0 ){
System.out.print((char)bis.read());
}
}catch(FileNotFoundException fnfe)
{
System.out.println("The specified file not found" + fnfe);
}
catch(IOException ioe)
{
System.out.println("I/O Exception: " + ioe);
}
finally
{
try{
if(bis != null && fis!=null)
{
fis.close();
bis.close();
}
}catch(IOException ioe)
{
System.out.println("Error in InputStream close(): " + ioe);
}
}
}
}
試したこと
1:エクスプローラーを開く
2:表示をクリックしてオプションを選択
3:フォルダーオプションの表示を選択して詳細設定の”登録登録されている拡張子の表示しない"のチェックを外し適応させ閉じた
4:参照したいフォルダのdirectory pathをコピーしたのをそのまま使用した。
5:参照したいフォルダの前に"\\"を付け加えてあります。
補足情報(FW/ツールのバージョンなど)
Java_version:8.0
追記1
names.text"→names.txtに変更
public static void main(String[] args) {
System.out.println("<出現回数>");
//Specify the path of the file here
File file = new File("C:\\JavaAssignment\\names.txt");
BufferedInputStream bis = null;
FileInputStream fis= null;
追記2
-問題点
fileはとりあえず読み込めてerrorが発生しないんですけど、表示された文字が文字化けしてます。恐らく文字コードが一致していないからだと思うんです。
-前提
・eclipseの文字コード
>>コンテナーからの継承(l) MS932
-試したことeclipseで文字コードの変更(UTF-8)にしても正しく表示されません。
-分からない
上記で試したこと以外で文字化けを解決する方法があればご教示願います。
#追記3
・元のテキストファイルの内容は以下です。
2a3502ce52dfff585001ae9bdbca.png)説明](9a3c1e7ce6372c9d97e2753879ee9e51.png)](1b46938a6ace287bd519de6a96d9e477.png)
・英語テキストファイルは以下です。
※日本語でのテキストファイの中身は日本人の名前に、英語でのテキストファイには外国人の名前で記載しています
どちらにしても、英語で記載した中身か日本語かの違いだけですが。
・コンソールでは以下の様にテキストファイから読み込まれた文字のみ文字化け
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
InputStream の代わりに Reader を使った次のコードを試すとどうなりますか?
import java.io.*;
public class Assignment5 {
public static void main(String[]args) {
System.out.println("<出現回数>");
File file = new File("C:\\JavaAssignment\\names.txt");
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
int c;
while ((c = br.read()) != -1)
System.out.print((char)c);
} catch(FileNotFoundException fnfe) {
System.out.println("The specified file not found" + fnfe);
} catch(IOException ioe) {
System.out.println("I/O Exception: " + ioe);
}
}
}
追記
「安」という漢字の文字コードは次のようになります。
Shit-JIS: 88 c0 (ファイル上のコード)
UTF-8: e5 ae 89 (ファイル上のコード)
Unicode: 5b89 (Java の char の内部コード)
InputStream の read() は 1バイトずつ読み込むので、それを 2バイトの char に
キャストすると、0088 00c0 または 00e5 00ae 0089 という文字列になります。
だから文字化けします。
Reader の read() は複数バイトを読み込んで 5b89 という 1文字に変換します。
だから文字化けしません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
LouiS0616
2020/04/06 10:54 編集
names.text ⇒ names.txt では?
(これで解決するようであれば回答欄に移行します。現時点では単に質問が誤っている可能性を否定できないので。)
退会済みユーザー
2020/04/06 10:57
あ、すみませんでした。そうでした。修正します
退会済みユーザー
2020/04/06 11:09
fileはとりあえず読み込めてerrorが発生しないんですけど、表示された文字が文字化けしてます。恐らく文字コードが一致していないからだと思うんですが、eclipseで文字コードの変更(UTF-8)にしても正しく表示されません。どうしてですかね?
LouiS0616
2020/04/06 11:13 編集
メモ帳で『名前を付けて保存』する際に文字コードを選べます。
ちょっと古めのWindowsをご利用の場合デフォルトでShift-JISが使われているかもしれません。
退会済みユーザー
2020/04/06 11:27
一応メモ帳を確認してみたところ、文字コードは[UTF-8]でした
LouiS0616
2020/04/06 11:35
エンコーディングを伴う場合、Reader系のクラスを介する必要があるんじゃないかと思います(多分)。
---
ひょっとしてこれは海外の教材でしょうか。
もしそうなのであれば、names.txtの内容も英字しか想定していないのかもしれません。
退会済みユーザー
2020/04/06 11:59
eclipseが日本語だからですかね?
一応海外の大学に通っているため教材は全て英語です。
私もそうかなと思い、names.txtの内容を英語にしてみました。結果は同じく文字化け。
Reader系のクラスを介するとはどういう意味ですか?
jimbe
2020/04/06 13:08
> names.txtの内容を英語にしてみました。結果は同じく文字化け
通常使用で半角アルファベットが文字化けというのはまず考えられないのですが...
どのような「文字化け」なのか, 元ファイルと結果をキャプチャでご提示頂いたり, 結果をバイナリで表示してみると良いかもしれません.
LouiS0616
2020/04/06 13:09
ネットに落ちているサンプルだと、InputStreamReaderを利用しているものが多いかと。
---
英字が文字化けするのは不可解ですね。
文字化けはどのような範囲で発生しているでしょうか。全体的でしょうか/あるいは局所的でしょうか?
退会済みユーザー
2020/04/06 13:36
読み込んだテキストファイの文字のみコンソールに文字化けしてますね。
日本語でかいた中身のテキストファイルと英語で書いたのをキャプチャーして挿入したのでご確認ください。