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

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

ただいまの
回答率

88.58%

コードをどう直せばいいか教えて下さい。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 465

TTTTkuma

score 7

StudentTestクラスにてテキストファイルstudent.txtをからデータを読み込み、テキストファイルの各行をStudentオブジェクトに変換してバイナリファイルstudent.datに書き込み、そのStudentに書き込まれたデータが正しいか確認したいのですが上手くいきません。
どう改善すればよろしいでしょうか?助言くださると助かります。
テキストファイル内の文書は

Sam  001 1999/01/07
Jennifer 002 1998/04/05
Bob  003 1999/03/14
Jonathan 004 1998/09/07
となります。

package studenttest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class StudentTest {

    private static void processAllFiles(File dir) {
        File files[] = dir.listFiles();
        for(File file : files) {
            if(file.isFile()) {
                if(file.getAbsolutePath().endsWith(".java")) {
                    System.out.println(file.getAbsolutePath());
                }
            }
            else processAllFiles(file);
        }
    }
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        readStudents("D:\\students.txt","big5");

    }


    private static void readObjectStream(String filename) throws ClassNotFoundException, IOException {
        ObjectInputStream input=null;
        try {
            input = new ObjectInputStream(new FileInputStream(filename));
            while (true) {
                Object o = input.readObject();
                System.out.println(o);
                if (o == null) {
                    break;
                }
            }
            input.close();            
        } catch (IOException | ClassNotFoundException e) {
            input.close();            
        }
    }
    private static void writeObjectStream(String filename) throws FileNotFoundException, IOException {
        try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(filename))) {
            output.writeObject(new Date(1992, 3, 23));
            output.writeObject(new Date(1997, 5, 3));
            output.writeObject(new Date(2010, 7, 16));
            output.writeObject("hello");
            output.writeObject(new Student("John","213" , new Date(1997, 5, 3)));
        }
    }
    private static void writeToFileWithEncoding(String fileanme, String encoding) {
        try {
            FileOutputStream stream = new FileOutputStream(fileanme);
            OutputStreamWriter writer = new OutputStreamWriter(stream, encoding);
            try (BufferedWriter output = new BufferedWriter(writer)) {
                output.write("Abc");
                output.write("オブジェクト指向");
            }
        } catch (IOException ex) {
            Logger.getLogger(StudentTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    private static void readMembers(String filename, String encoding) throws FileNotFoundException, IOException {
        try (BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(filename), encoding))) {
            Student students[] = new Student[3];
            int index = 0;
            while (true) {
                String line = input.readLine();
                if (line == null) {
                    break;
                }

                String tokens[] = line.split(",");

                String name = tokens[0], id = tokens[1], birthday = tokens[2];
                String births[] = birthday.split("/");

                int yy = Integer.parseInt(births[0]), mm=Integer.parseInt(births[1]),dd=Integer.parseInt(births[2]);

                students[index] =  new Student(name, id, new Date(yy, mm, dd));
                index++;

            }
            System.out.println("--------------");
            for(Student member : students) System.out.println(member);
        }
    }

    private static void readByReaderWithEncoding(String filename, String encoding) throws FileNotFoundException, IOException {
        FileInputStream stream = new FileInputStream(filename);
        InputStreamReader reader = new InputStreamReader(stream, encoding);
        try (BufferedReader input = new BufferedReader(reader)) {
            while (true) {
                String line = input.readLine();
                if (line == null) {
                    break;
                }
                System.out.println(line);
            }
        }
    }
    private static void readByReaderDefaultEncoding(String filename) throws FileNotFoundException, IOException {
        try (FileReader reader = new FileReader(filename)) {
            while (reader.ready()) {

                char[] chIn = new char[10];

                int nResult = reader.read(chIn);
                if (nResult == -1) {
                    break;
                }


                System.out.println(chIn);
            }
        }
    }
    private static void readFileStream(String filename) {
        try {
            System.out.println("main started");
            try (FileInputStream fis = new FileInputStream(filename)) {
                System.out.println("input is " + fis);
                while (fis.available() > 0) {

                    byte[] b = new byte[1];

                    int nResult = fis.read(b);
                    if (nResult == -1) {
                        break;
                    }

                    System.out.print(new String(b));
                }
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(StudentTest.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(StudentTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    private static void readStudents(String dstudentstxt, String big5) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
package studenttest;
public class Student {
    String name;
    String id;
    Date birthday;
    public Student(String n,String i, Date d) {
        name = n;
        id = i;
        birthday = d;

    }
    @Override
    public String toString() {
        return name + ": " +  id +": " + birthday;
    }
}
package studenttest;
import java.io.Serializable;
public class Date implements Serializable {
    int year, month, day;
    public Date(int yy, int mm, int dd) {
        year = yy;
        month = mm;
        day = dd;
    }
    public String toString() {
        return String.format("%04d/%02d/%02d", year, month, day);
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • jimbe

    2020/04/19 16:04

    コードの途中に
    > chIn 中,若已達檔案底端則回傳-1
    という妙なモノが入っていますが, これは何でしょう.

    キャンセル

  • TTTTkuma

    2020/04/19 16:21

    それは消し忘れた文ですね。
    修正いたしました!

    キャンセル

回答 2

0

そのエラーは、
「指定されたパス名で示されるファイルが開けなかったこと」
を指すので、「members.txt」が保存されている場所をもう一度確認する必要がありそうですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/19 17:39

    みたところwriteObjectStream(String filename)が重要なのかな。。
    fileTest.writeObjectStream("member")をmain関数内で呼び出うのが良いかも

    キャンセル

  • 2020/04/19 18:23

    すいません、ここで全く違う質問なのですが…。
    このコードを改変してこの三つのDate、Member、FileTestのうち、FileTestでパソコンの内にあるテキストファイルからデータを読み込みそのテキストの各行をMemberオブジェクトに変換してバイナリファイルmember.datに書き込み、そこに書き込まれたデータが正しいか確認する様にすることって可能でしょうか?

    キャンセル

  • 2020/04/19 18:41

    可能か不可能かでいうと可能であると思います...
    ですがそこに至るまでのプロセスはもう少し簡単にできそうです。
    まずはテキストファイルの内容を読み込みjavaプログラムで変数に格納し、扱うことから始めるべきですね

    キャンセル

0

    public static void main(String[] args) throws IOException, ClassNotFoundException {

        readStudents("D:\\students.txt","big5");

    }
    private static void readStudents(String dstudentstxt, String big5) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }


これで動かそうとしても不可能ですよね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る