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

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

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

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

Q&A

解決済

2回答

1652閲覧

【Java】Hashmapを使って2つのCSVファイルを一つに纏めて出力したい

neroS2eng

総合スコア16

Java

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

0グッド

0クリップ

投稿2020/06/16 00:29

支店一覧ファイルと売上報告ファイル(支店ごと複数個)の
2種類のデータファイルが同じフォルダ内にまとまっており、
その2データファイル内に記載の支店コードをキーとして
"uriage"という一つのCSVファイルに纏めて出力したいのですが、
売上の出力結果が下記に添付している通り”0”になってしまいます。

抽出したCSV

キーの指定間違いかと思いましたが違わなそうなのでどこが原因なのか、
ご教示いただけると助かります。
(拙いコードだとは思いますが、まずは自分の力でとりあえずでも動くものを作りたいので
あくまでもアドバイス程度で大きく変更はしないでいただけると助かります。。。)

****売上報告フォルダ****
【支店一覧ファイル】
<shiten>
001,大阪
002,山口
003,福岡
004,東京
005,静岡

【売上報告ファイル】
<000001.rcd>
001
43000000

<000002.rcd>
002
65400000

<000003.rcd>
003
120000

<000004.rcd>
004
5789000
**************** 

Java

1public class Sales { 2 public static void main(String args[]) { 3 4 HashMap<String, String> branchName = new HashMap<String, String>(); 5 HashMap<String,Long> branchEarnings = new HashMap<String, Long>(); 6 BufferedReader br = null; 7 8   //1,支店定義ファイルの読み込み 9 try { 10 File file = new File(args[0], "shiten"); 11 FileReader filereader = new FileReader(file); 12 br = new BufferedReader(filereader); 13 14 String line; 15 while((line = br.readLine()) != null) { 16 for(int i = 0; i < 2; i++) { 17 String[] box = line.split(","); 18 branchName.put(box[0], box[1]); 19 branchEarnings.put(box[0], (long)0); 20 } 21 System.out.println(line); 22 } 23 } catch(IOException e) { 24 System.out.println("予期せぬエラーが発生しました"); 25 } finally { 26 if(br != null) { 27 try { 28 br.close(); 29 } catch(IOException e) { 30 System.out.println("予期せぬエラーが発生しました"); 31 } 32 } 33 } 34 35 36 //2.売上ファイルの読み込み 37 try { 38 File f = new File(args[0]); 39 File[] list = f.listFiles(); 40 for(int i = 0; i < list.length; i++) { 41 if(list[i].getName().matches("[0-9]{6}.rcd")) { 42 43 BufferedReader b = new BufferedReader(new FileReader(list[i])); 44 System.out.println(b.readLine()); 45 String[] box = b.readLine().split("\n"); 46 Long Salce = Long.valueOf(box[0]); 47 branchEarnings.put(box[0], Salce); 48 System.out.println(branchEarnings.get(box[0])); 49 } else { 50 System.out.println(""); 51 } 52 } 53 } catch(IOException e) { 54 System.out.println(""); 55 56 } finally { 57 if(br != null) { 58 try { 59 br.close(); 60 System.out.println(""); 61 } 62 } 63 } 64 65 //集計 66 try { 67 File outFile = new File(args[0], "uriage"); 68 BufferedWriter fw = new BufferedWriter(new FileWriter(outFile)); 69 70 for(Map.Entry<String, String> entry : branchName.entrySet()) { 71 72 fw.write(entry.getKey() + "," + entry.getValue() + "," + branchEarnings.get(entry.getKey())); 73 fw.newLine(); 74 } 75 fw.close(); 76 } catch(IOException e) { 77 e.printStackTrace(); 78 System.out.println(""); 79 } finally { 80 if(br != null) { 81 try { 82 br.close(); 83 } catch(IOException e) { 84 System.out.println(""); 85 } 86 } 87 } 88 } 89}

よろしくお願いいたします。

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

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

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

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

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

swordone

2020/06/16 02:29

売り上げファイル読み込み終了後、 System.out.println(branchEarnings); するとどうなりますか?
neroS2eng

2020/06/16 04:24

0のまま変化なしでしたが、コンソールの出力が 001,大阪 002,山口 003,福岡 004,東京 005,静岡 001 {山口=0, 大阪=0, 43000000=43000000, 福岡=0, 東京=0, 静岡=0} 002 {山口=0, 大阪=0, 43000000=43000000, 65400000=65400000, 福岡=0, 東京=0, 静岡=0} 003 {山口=0, 大阪=0, 120000=120000, 43000000=43000000, 65400000=65400000, 福岡=0, 東京=0, 静岡=0} 004 {山口=0, 大阪=0, 120000=120000, 43000000=43000000, 65400000=65400000, 5789000=5789000, 福岡=0, 東京=0, 静岡=0} となったので、やはりキーの間違いかもしれません。。
guest

回答2

0

自己解決

自己解決出来ました!
売上ファイルの読み込み部分にb.readLine()を2回使っていることが原因でした。
また、for文を使っているのに配列に格納して繰り返させようとしていたのも違っていました。

Java

1 //2.売上ファイルの読み込み 2 try { 3 File f = new File(args[0]); 4 File[] list = f.listFiles(); 5 for(int i = 0; i < list.length; i++) { 6 if(list[i].getName().matches("[0-9]{8}.rcd")) { 7 BufferedReader b = new BufferedReader(new FileReader(list[i])); 8 9 String box = b.readLine(); 10 Long box2 = Long.valueOf(b.readLine()); 11 branchEarnings.put(box, box2); 12 System.out.println(branchEarnings);

お二方とも本当にありがとうございました!

投稿2020/06/16 06:09

neroS2eng

総合スコア16

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

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

0

キーの指定間違いかと思いましたが違わなそうなので

ここだけ見たらキーが違いそうですけど。。。

java

1 Long Salce = Long.valueOf(box[0]); 2 branchEarnings.put(box[0], Salce);

金額をキーに金額を設定してます?

投稿2020/06/16 02:32

momon-ga

総合スコア4820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問