2

私はこの宿題をしていて.txt、整数で満たされたファイルをdouble配列に読み込んでから、この二重配列を別の.txtファイルに書き込むことになっています。

.txt最初は、ファイルを読み取って画像として表示し、sとしてファイルに保存できたので、すべてが機能していると思いましたdouble。ただし、同じクラスファイルを別のレッスンで使用しようとすると(作成したフレームに表示する)、0.0出力.txtファイルの値として取得し続けました。以下は、私の読み取りおよび書き込みクラスのコードです。

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class IO {
  FileDialog fd;
  public double[][] readData() {
    fd = new FileDialog(new Frame(), "Open Files", FileDialog.LOAD);
    fd.setVisible(true);
    File f = null;
    if ((fd.getDirectory() != null)||( fd.getFile() != null)) {
      f = new File(fd.getDirectory() + fd.getFile());
    }
    FileReader fr = null;
    try {
      fr = new FileReader (f);
    } catch (FileNotFoundException fnfe) {
      fnfe.printStackTrace();
    }
    BufferedReader br = new BufferedReader(fr);
    int lines = -1;
    String textIn = " ";
    String[] file = null;
    try {
      while (textIn != null) {
        textIn = br.readLine();
        lines++;
      }
      file = new String[lines];
      fr = new FileReader (f);
      br = new BufferedReader(fr);
      for (int i = 0; i < lines; i++) {
        file[i] = br.readLine();
      }
      br.close();
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
    double[][] data = new double [lines][];
    for (int i = 0; i < lines; i++) {
      StringTokenizer st = new StringTokenizer(file[i],",");
      data[i] = new double[st.countTokens()];
      int j = 0;
      while (st.hasMoreTokens()) {
        data[i][j] = Double.parseDouble(st.nextToken());
        j++;
      }
    }
    return data;
  }


  public void writeData(double[][] dataIn) {
    fd = new FileDialog(new Frame(), "Save Files", FileDialog.SAVE);
    fd.setVisible(true);
    File f = null;
    if ((fd.getDirectory() != null)||( fd.getFile() != null)) {
      f = new File(fd.getDirectory() + fd.getFile());
    }
    FileWriter fw = null;
    try {
      fw = new FileWriter (f, true);
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
    BufferedWriter bw = new BufferedWriter (fw);
    String tempStr = "";
    try {
      for (int i = 0; i < dataIn.length; i++) {
        for (int j = 0; j < dataIn[i].length; j++) {
          tempStr = String.valueOf(dataIn[i][j]);
          bw.write(tempStr);
        }
        bw.newLine();
      }
      bw.close();
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

私が読み込もうとしているtxtファイルには300行と列がありますが、すべての列がint番号でいっぱいになっているわけではありません。入力txtをDisplayにすることはできましたが、同じ値でintではなくdoubleのtxtファイルとして保存することはできませんでした。

誰かがここで私を助けてくれませんか?

4

2 に答える 2

1

完全な問題を理解できるかどうかはわかりませんが、少なくとも、ファイルに書き込むときに各番号の後にコンマを追加するのを忘れるという問題があります。数字を区切るためreadDataにコンマを使用するため、プログラムで作成されたファイルをプログラムで読み取ることはできません。変更するだけ

for (int j = 0; j < dataIn[i].length; j++) {
          tempStr = String.valueOf(dataIn[i][j]);
          bw.write(tempStr);

for (int j = 0; j < dataIn[i].length; j++) {
          bw.write(String.valueOf(dataIn[i][j]) + ",");

tempStr(コードが不要になったため、中間体を削除しました)。

于 2012-07-01T02:10:46.190 に答える
0

私はこれをなんとか分類できたと思いますが、それが正しい方法かどうかはわかりません。以下は、データを書き込むためのtrycatchループの前に追加したものです。

BufferedWriter bw = new BufferedWriter (fw);
dataIn = getData(dataIn);
try {

クラスにgetData(double [] [] data)メソッドを作成したので、でデータを読み取ることができます。

于 2012-07-01T09:51:36.370 に答える