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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

1回答

3298閲覧

Java FileInputStreamでテキストファイルが読み込めない

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2020/04/06 01:50

編集2020/04/06 04:35

お知恵をおかしください

前提・実現したいこと

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)説明
・英語テキストファイルは以下です。
イメージ説明
※日本語でのテキストファイの中身は日本人の名前に、英語でのテキストファイには外国人の名前で記載しています
どちらにしても、英語で記載した中身か日本語かの違いだけですが。
・コンソールでは以下の様にテキストファイから読み込まれた文字のみ文字化け
イメージ説明

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

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

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

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

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

LouiS0616

2020/04/06 01:56 編集

names.text ⇒ names.txt では? (これで解決するようであれば回答欄に移行します。現時点では単に質問が誤っている可能性を否定できないので。)
退会済みユーザー

退会済みユーザー

2020/04/06 01:57

あ、すみませんでした。そうでした。修正します
退会済みユーザー

退会済みユーザー

2020/04/06 02:09

fileはとりあえず読み込めてerrorが発生しないんですけど、表示された文字が文字化けしてます。恐らく文字コードが一致していないからだと思うんですが、eclipseで文字コードの変更(UTF-8)にしても正しく表示されません。どうしてですかね?
LouiS0616

2020/04/06 02:13 編集

メモ帳で『名前を付けて保存』する際に文字コードを選べます。 ちょっと古めのWindowsをご利用の場合デフォルトでShift-JISが使われているかもしれません。
退会済みユーザー

退会済みユーザー

2020/04/06 02:27

一応メモ帳を確認してみたところ、文字コードは[UTF-8]でした
LouiS0616

2020/04/06 02:35

エンコーディングを伴う場合、Reader系のクラスを介する必要があるんじゃないかと思います(多分)。 --- ひょっとしてこれは海外の教材でしょうか。 もしそうなのであれば、names.txtの内容も英字しか想定していないのかもしれません。
退会済みユーザー

退会済みユーザー

2020/04/06 02:59

eclipseが日本語だからですかね? 一応海外の大学に通っているため教材は全て英語です。 私もそうかなと思い、names.txtの内容を英語にしてみました。結果は同じく文字化け。 Reader系のクラスを介するとはどういう意味ですか?
jimbe

2020/04/06 04:08

> names.txtの内容を英語にしてみました。結果は同じく文字化け 通常使用で半角アルファベットが文字化けというのはまず考えられないのですが... どのような「文字化け」なのか, 元ファイルと結果をキャプチャでご提示頂いたり, 結果をバイナリで表示してみると良いかもしれません.
LouiS0616

2020/04/06 04:09

ネットに落ちているサンプルだと、InputStreamReaderを利用しているものが多いかと。 --- 英字が文字化けするのは不可解ですね。 文字化けはどのような範囲で発生しているでしょうか。全体的でしょうか/あるいは局所的でしょうか?
退会済みユーザー

退会済みユーザー

2020/04/06 04:36

読み込んだテキストファイの文字のみコンソールに文字化けしてますね。 日本語でかいた中身のテキストファイルと英語で書いたのをキャプチャーして挿入したのでご確認ください。
guest

回答1

0

ベストアンサー

InputStream の代わりに Reader を使った次のコードを試すとどうなりますか?

Java

1import java.io.*; 2 3public class Assignment5 { 4 public static void main(String[]args) { 5 System.out.println("<出現回数>"); 6 File file = new File("C:\JavaAssignment\names.txt"); 7 FileReader fr = null; 8 BufferedReader br = null; 9 10 try { 11 fr = new FileReader(file); 12 br = new BufferedReader(fr); 13 int c; 14 while ((c = br.read()) != -1) 15 System.out.print((char)c); 16 } catch(FileNotFoundException fnfe) { 17 System.out.println("The specified file not found" + fnfe); 18 } catch(IOException ioe) { 19 System.out.println("I/O Exception: " + ioe); 20 } 21 } 22}

追記
「安」という漢字の文字コードは次のようになります。
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文字に変換します。
だから文字化けしません。

投稿2020/04/06 06:00

編集2020/04/06 07:07
kazuma-s

総合スコア8224

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

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

退会済みユーザー

退会済みユーザー

2020/04/06 06:23

なんか、回答して下さったコードで解決はできました。 FileReaderでないとそもそも読み込みされないってことですか? FileReader and BuffaReaderでできて、私が書いたコードでできない明確な理由があればご教示願います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問