🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

2回答

1613閲覧

Java ファイルの出力ができません。

javarou

総合スコア3

Java

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

0グッド

0クリップ

投稿2019/09/13 03:41

編集2019/09/17 06:27

2つ目のコードで、文字コードを指定したものを作ってみたのですが、実行時に
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at practice.Number.main(Number.java:20)
と出てしまいます、なぜでしょうか?

Java

1 2import java.io.File; 3import java.io.FileWriter; 4import java.io.IOException; 5import java.util.HashMap; 6import java.util.Map; 7import java.util.Scanner; 8 9public class ProfileCreator { 10 11 public static void main(String[] args) { 12 // TODO 自動生成されたメソッド・スタブ 13 Map<String, String> map = getProfileInfo(); 14 15 outputTextFile(map, args[0]); 16 17 System.out.println("処理が終了しました。"); 18 19 } 20 21 public static Map<String, String> getProfileInfo() { 22 Scanner sc = new Scanner(System.in); 23 24 System.out.println("名前を入力してください"); 25 String a = sc.next(); 26 27 System.out.println("目標資格を入力してください"); 28 String b = sc.next(); 29 30 System.out.println("出身校を入力してください"); 31 String c = sc.next(); 32 33 System.out.println("メッセージを入力しください"); 34 String d = sc.next(); 35 36 HashMap<String, String> map = new HashMap<String, String>(); 37 38 map.put("name", a); 39 map.put("qualification", b); 40 map.put("school", c); 41 map.put("message", d); 42 43 return map; 44 } 45 46 public static void outputTextFile(Map<String, String> pro1, String dir) { 47 48 File file = new File(dir); 49 50 FileWriter filewriter = null; 51 try { 52 filewriter = new FileWriter(file); 53 } catch (IOException e) { 54 // TODO 自動生成された catch ブロック 55 e.printStackTrace(); 56 } 57 58 try { 59 filewriter.write(pro1.get("name")); 60 filewriter.write(pro1.get("qualification")); 61 filewriter.write(pro1.get("school")); 62 filewriter.write(pro1.get("message")); 63 filewriter.close(); 64 System.out.println("テキストファイルの作成に成功しました"); 65 } catch (IOException e) { 66 // TODO 自動生成された catch ブロック 67 e.printStackTrace(); 68 } 69 70 } 71 72} 73 74 75

java

1import java.io.BufferedWriter; 2import java.io.File; 3import java.io.FileNotFoundException; 4import java.io.FileOutputStream; 5import java.io.OutputStreamWriter; 6import java.io.PrintWriter; 7import java.io.UnsupportedEncodingException; 8import java.util.HashMap; 9import java.util.Map; 10import java.util.Scanner; 11 12public class Number { 13 14 public static void main(String[] args) { 15 // TODO 自動生成されたメソッド・スタブ 16 Map<String, String> map = getProfileInfo(); 17 18 outputTextFile(map, args[0]); 19 20 System.out.println("処理が終了しました。"); 21 22 } 23 24 public static Map<String, String> getProfileInfo() { 25 Scanner sc = new Scanner(System.in); 26 27 System.out.println("名前を入力してください"); 28 String a = sc.next(); 29 30 System.out.println("目標資格を入力してください"); 31 String b = sc.next(); 32 33 System.out.println("出身校を入力してください"); 34 String c = sc.next(); 35 36 System.out.println("メッセージを入力しください"); 37 String d = sc.next(); 38 39 sc.close(); 40 41 HashMap<String, String> map = new HashMap<String, String>(); 42 43 map.put("name", a); 44 map.put("qualification", b); 45 map.put("school", c); 46 map.put("message", d); 47 48 return map; 49 } 50 51 public static void outputTextFile(Map<String, String> pro1, String dir) { 52 53 File file = new File(dir); 54 55 try { 56 PrintWriter p_writer = new PrintWriter( 57 new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "Shift-JIS"))); 58 p_writer.println(pro1.get("name")); 59 p_writer.println(pro1.get("qualification")); 60 p_writer.println(pro1.get("school")); 61 p_writer.println(pro1.get("message")); 62 p_writer.close(); 63 System.out.println("テキストファイルの作成に成功しました"); 64 } catch (UnsupportedEncodingException | FileNotFoundException e) { 65 // TODO 自動生成された catch ブロック 66 ((Throwable) e).printStackTrace(); 67 } 68 69 } 70 71} 72

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

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

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

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

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

tetutetu

2019/09/13 04:17

誤ってコメントでなく回答に投稿してしまったので最低限の回答は行いましたが >Java ファイルの出力と呼び出し return文 というよりもメソッドの扱い方が理解できていないように見受けられます。 学校等の課題なのであれば、以前の内容を復習した方が宜しいかと。
tetutetu

2019/09/13 04:25

意図した動作をするコードをパッと書いて回答に投げること自体は簡単ですが 「課題、問題をただ終わらせたい」のではなく 「自分で作成する力をつけたい」のであれば、分からないことについて ・何を試して ・どうなって ・何が分からない のかを記載した方が、本人の為になるかと思います。
javarou

2019/09/13 04:43

アドバイスありがとうございます。 試してみますね! 学校では、まだ基本的なことしか習ってなくて、mapとファイル出力に関しては習っていないんですよね(汗)
tetutetu

2019/09/17 05:02

>filewriter.write(pro1);の文でエラーが出てしまいます、なぜでしょうか。 Map「pro1」から値を取り出すにはpro1.get("キーの名前")のように記述する必要があります。 コード上ではKey1~Key4が該当しますが、分かりやすい名前(名前ならname等)に変更すべきかなと。 Map (Java Platform SE 8 ) https://docs.oracle.com/javase/jp/8/docs/api/java/util/Map.html
tetutetu

2019/09/17 05:07

単純に「何故か」という話 FileWriter.write()に渡せる(今渡したい)引数はString(他にもいくつかありますが、当然Mapは不可) 実際に渡そうとしているpro1はMapだからです。
javarou

2019/09/17 05:20

分かりやすい解説ありがとうございます! 変更してみたのですがこれでよいのでしょうか?
tetutetu

2019/09/17 05:31

ざっとしか見てないので、エラーを吐かないのであればMapから値を取り出すこと自体は出来てると思います。 ただ実行してみるとわかると思うんですが、改行されなくないですか?
javarou

2019/09/17 06:22

改行というのは実行画面ででしょうか? それとも実行結果の他に、fileの出力結果の確認て出来るのでしょうか、もしできたらその方法教えてください。
tetutetu

2019/09/17 06:38

>Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at practice.Number.main(Number.java:20) 実行時args[]に値は渡していますか? >fileの出力結果の確認て出来るのでしょうか 実行して意図した通り動作したならばファイルが生成、書き込まれている状態になりますよね。
javahack

2019/09/17 15:41

質問内容が最初のものと全く違っているため、一部の指摘・回答が意味不明なものになってしまっています。 元の質問は残した上で、指摘を受けて修正・実行した結果とそれに伴う質問を追記の形で記載した方が良いと思います。
javarou

2019/09/18 07:18

値の渡し方は コマンドプロンプトで、 java クラス名 引数 で良いのでしょうか?
javarou

2019/09/18 07:18

javahack さん ご指摘ありがとうございます。以降、気を付けます。
tetutetu

2019/09/18 07:21

一度試されてはいかがでしょうか。
guest

回答2

0

追記

outputTextFileメソッドにて以下の処理を行おうとしているのですがこれであっているのでしょうか。

だんだん近づいてきてます。

File file = new File("c:¥¥tmp¥¥test.txt");

現状のコードでは文字列で指定していますが、当初の要件だとファイルのパスはargs[0]に入っているのではなかったでしょうか。

filewriter.write("Profile.txt");

現状、書き込まれる文字列が「Profile.txt」になっています。
引数には、書き込みたい内容を入力します。
また、closeも必要になります。
FileWriter (Java Platform SE 8 )

「プロフィール情報」と、「ファイルの出力先ディレクトリ」を指定してとあるのですが、その意味が分かりません。

outputTextFile()の引数に上記2種を追加するだけでは。

現在、 getProfileInfo()

の戻り値を本来、Map<String,String>でやるべきところを配列でやってしまっています。

戻り値を配列にしている上に、メインメソッド側で何も受け取っていません
作成したMapを受け取るように書き換えてください。

また、outputTextFile()

の中に書くべきことがサッパリわかりません。

Ⅰ. 引数として受け取った「プロフィール情報」を、引数で渡された「出力先ディレクトリ」に「Profile.txt」という名前で出力する。 Ⅱ. 出力するテキストファイルの文字コードは「SJIS」とし、項目ごとに改行を行う。

書いてある通りですね。

投稿2019/09/13 04:10

編集2019/09/17 03:52
tetutetu

総合スコア419

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

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

0

仕様がぐちゃぐちゃで、どこからどこまでがどれのことについてなのかがわからんかった...orz

[mainメソッド] 実行したときに呼び出されるメソッド。以下の処理を行う。 Ⅰ. getProfileInfo()を呼び出し、入力されたプロフィール情報のMapを取得する。 Ⅱ. Ⅰ.で取得した「プロフィール情報」と「ファイルの出力先ディレクトリ」を指定して、outputTextFile()を呼び出す。 ※outputTextFileの呼び出し時に指定する「ファイルの出力先ディレクトリ」は、実行時に(String[] args)へ設定してあるものとする。 Ⅲ. すべての処理が終了後、メッセージ「処理が終了しました。」を標準出力する。
[getProfileInfoメソッド] 以下の処理を行う。 Ⅰ. 項目「名前」「目標資格」「出身校」「メッセージ」を、順番にキーボードから入力させる。 Ⅱ. Ⅰ.で入力された値をMapに格納して返却する。   ◇引数:なし ◇戻り値:Map<String,String>   getProfileInfo()サンプル 名前を入力してください。 //>入力 目標資格を入力してください。 //>入力 出身校を入力してください。 //>入力 メッセージを入力してください。 //>入力
[outputTextFileメソッド] 以下の処理を行う。 Ⅰ. 引数として受け取った「プロフィール情報」を、引数で渡された「出力先ディレクトリ」に「Profile.txt」という名前で出力する。 Ⅱ. 出力するテキストファイルの文字コードは「SJIS」とし、項目ごとに改行を行う。   ◇引数:(Map<String,String>、String) ※引数の命名は任意 ◇戻り値:なし

ですよね。

質問のやつは、mainメソッドのⅡですよね。

Ⅱ. Ⅰ.で取得した「プロフィール情報」と「ファイルの出力先ディレクトリ」を指定して、~

質問にあるコードでは確かに意味不明。
だって、どこにも"プロフィール情報"とかがないんだもん。

そして、getProfileInfoメソッドの仕様を見ると、

◇引数:なし

◇戻り値:Map<String,String>

となっている。これが足りない。

つまり、仕様を読まずに書いたか、そもそも基礎すらできていないことが原因。

getProfileInfoメソッドの戻り値として受け取ったMapの値をそれぞれ「プロフィール情報」,「ファイルの出力先ディレクトリ」としてoutputTextFileメソッドに渡す...ってことだろう。

つか、入門書嫁。

投稿2019/09/13 04:38

BeatStar

総合スコア4962

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問