文字ストリームに書き込み、書き込んだデータを読み込んで表示するプログラムを作りたいのですが,読み込んだ際、番号と名前の部分がnullと表示されています。書き込みとファイルの部分は問題ないと思います。アドバイスなど些細なことでもいいのでお教えいただけると助かります。
(どちらも実行できます,importされているgrade4の部分は問題ないと思っています。)
写真1 両方クラスの実行結果
写真2 a.dat(書き込んだファイル)
写真3 grade4
環境...sentos
言語...java
java
1//書き込み用クラス 2package grade6; 3import java.io.*; 4import java.util.*; 5import grade4.*; 6public class WriteGradeToFile{ 7 public static void main(String[] args){ 8 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); 9 10 Vector buffer = new Vector(); 11 System.out.println("バッファの容量 = "+buffer.capacity()); 12 13 if(args.length != 1) { 14 System.out.println("エラー:出力ファイル名を1つ与えてください。"); 15 System.out.println("使い方:$ java grade4.WriteGradeTofile.dat"); 16 System.exit(1); 17 } 18 try{ 19 while(true) { 20 Student s = new Student(); 21 System.out.print("番号=>"); 22 s.setNumber(buf.readLine()); 23 24 if(s.getNumber().equals(".")) break; 25 System.out.print("名前=>"); 26 s.setName(buf.readLine()); 27 System.out.print("英語=>"); 28 s.setEnglish(Integer.parseInt(buf.readLine())); 29 System.out.print("国語=>"); 30 s.setLiterature(Integer.parseInt(buf.readLine())); 31 System.out.print("数学=>"); 32 s.setMathematics(Integer.parseInt(buf.readLine())); 33 double avg = new WriteGradeToFile().computeAverage(s); 34 displayGrade(s,avg); 35 buffer.addElement(s); 36 buffer.addElement(new Double(avg)); 37 38 } 39 40 System.out.println(buffer.size() + "個のデータを入力しました。"); 41 writeGradeToFile(args[0],buffer); 42 43 44 System.out.println(args[0] + "へ書き出しました。"); 45 46 System.out.println(); 47 } 48 catch(IllegalPointsException ipe){ 49 System.err.println(ipe); 50 } 51 catch(NumberFormatException nfe){ 52 System.err.println(nfe); 53 } 54 catch(IOException ioe){ 55 System.err.println(ioe); 56 } 57 } 58 59 public double computeAverage (Student sub) { 60 return (double) (sub.getEnglish() + sub.getLiterature()+ sub.getMathematics())/3.0; 61 } 62 public static void displayGrade(Student sub, double avg){ 63 System.out.println("番号 = "+sub.getNumber()); 64 System.out.println("名前 = "+sub.getName()); 65 System.out.println("英語 = "+sub.getEnglish()); 66 System.out.println("国語 = "+sub.getLiterature()); 67 System.out.println("数学 = "+sub.getMathematics()); 68 System.out.println("平均 = "+avg); 69 } 70 public static void writeGradeToFile(String filename ,Vector v) throws IOException { 71 72 73 74 FileWriter fw = null; 75 BufferedWriter bw = null; 76 PrintWriter pw=null; 77 78 try { 79 fw = new FileWriter(filename,true); 80 bw = new BufferedWriter(fw); 81 pw = new PrintWriter(bw); 82 83 for(int i = 0;i < v.size(); i += 2){ 84 Student s = (Student)v.elementAt(i); 85 pw.println(s.getNumber()); 86 pw.println(s.getName()); 87 pw.println(s.getEnglish()); 88 pw.println(s.getLiterature()); 89 pw.println(s.getMathematics()); 90 double d = ((Double)v.elementAt(i+1)).doubleValue(); 91 pw.println(d); 92 93 pw.flush(); 94 } 95 } 96 catch(IOException ioe){ 97 System.err.println(ioe); 98 } 99 catch(Exception e){ 100 System.err.println(e); 101 } 102 finally{ 103 if(pw !=null) pw.close(); 104 if(bw !=null) bw.close(); 105 if(fw !=null) fw.close(); 106 } 107 } 108}
java
1 2//読み込み用クラス 3 4package grade6; 5import java.io.*; 6import java.util.*; 7import grade4.*; 8public class ReadGradeFromFile{ 9 public static void main(String[] args)throws IOException{ 10 BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); 11 12 if(args.length != 1) { 13 System.out.println("エラー:入力ファイル名を1つ与えてください。"); 14 System.out.println("使い方:$ java grade5.ReadGradeFromFilea ファイル名"); 15 System.exit(1); 16 } 17 ArrayList buffer = new ArrayList(); 18 19 20 FileReader fr = null; 21 BufferedReader br = null; 22 23 try{ 24 Student s = new Student(); 25 fr = new FileReader(args[0]); 26 br = new BufferedReader(fr); 27 System.err.println(args[0]+"から読み込みます。"); 28 System.err.println(args[0]+"の読み込みが終了しました。"); 29 30 while(true) { 31 32 s.setNumber(br.readLine()); 33 s.setName(br.readLine()); 34 if(s.getName() == null) { 35 36 37 break; 38 } 39 s.setEnglish(Integer.parseInt(br.readLine())); 40 s.setLiterature(Integer.parseInt(br.readLine())); 41 s.setMathematics(Integer.parseInt(br.readLine())); 42 double avg = Double.parseDouble(br.readLine()); 43 buffer.add(s); 44 buffer.add(new Double(avg)); 45 46 } 47 System.out.println(buffer.size()+"個のデータを読み込みました。"); 48 displayGrade(buffer); 49 50 } 51 catch(IllegalPointsException ipe){ 52 ipe.printStackTrace(); 53 } 54 catch(FileNotFoundException fnfe){ 55 System.err.println(fnfe); 56 } 57 catch(IOException ioe){ 58 System.err.println(ioe); 59 } 60 finally{ 61 if(br !=null) br.close(); 62 if(fr !=null) fr.close(); 63 } 64 } 65 66 public static void displayGrade(ArrayList al){ 67 for (int i = 0; i < al.size(); i += 2){ 68 Student s = (Student)al.get(i); 69 System.out.println("番号 = "+s.getNumber()); 70 System.out.println("名前 = "+s.getName()); 71 System.out.println("英語 = "+s.getEnglish()); 72 System.out.println("国語 = "+s.getLiterature()); 73 System.out.println("数学 = "+s.getMathematics()); 74 double d = ((Double)al.get(i+1)).doubleValue(); 75 System.out.println("平均 = "+d); 76 } 77 } 78}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。