2012-07-01 4 views
1

double 배열에 정수로 채워진 .txt 파일을 읽은 다음 다른 .txt 파일에이 숙제를 쓰는 것이이 숙제입니다.파일을 읽고 더블 배열로 저장 한 다음 새 파일로 작성하십시오.

처음에는 파일을 읽고 이미지로 표시 한 다음 .txt 파일에 double으로 저장하면 모든 것이 작동한다고 생각했습니다. 그러나 다른 수업 (같은 프레임에 표시)에 동일한 클래스 파일을 사용하려고 시도했을 때 파일의 값으로 0.0을 계속 사용했습니다. 다음은 내 읽기 및 쓰기 클래스의 코드는 다음과 같습니다

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(); 
    } 
    } 
} 

나는 모든 열이 INT 번호 전체에 가득있는 300 행과 열을 가지고 읽으려고 오전 txt 파일. 나는 입력 txt를 Display로 할 수는 있지만 같은 값을 가진 txt 파일로 다시 저장할 수는 없지만 int 대신 double로 저장합니다.

누군가 나를 도와 줄 수 있습니까?

+1

하세요 들여 쓰기 코드를 제대로! – niklon

+0

들여 쓰기에 대해 죄송합니다. 지금 업데이트했습니다. – Twyla

답변

1

전체 문제를 잘 모르겠지만 적어도 파일에 쓸 때 각 번호 뒤에 쉼표를 추가하는 것을 잊어 버리는 경우가 있습니다. readData은 쉼표를 사용하여 숫자를 구분하므로 프로그램에서 작성한 파일을 읽을 수는 없습니다. 간단히

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

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

을 변경 (코드 지금처럼 불필요한 때문에 중간 tempStr을 제거).

+0

안녕 니클라스, 당신의 방법을 시도했지만 작동하지 않습니다. 출력 txt 파일에서 구분 기호로 ","가없는 결과는 0.0입니다. – Twyla

+0

당신에게 무엇을 말해야할지 모르겠다 - 나는 실제로 그것을 직접 시도했고 출력 파일에 쉼표가있다. – niklon

+0

질문을 명확히해야 할 필요가 있다고 생각합니다. 정확히 무엇이 잘못 되었습니까? 예를 들어, 출력 파일 (및 어떤 입력이 생성되었는지)을 보여줍니다. – niklon

0

나는 그것이 올바른 방법 tho인지 확실하지 않은이 분류를 얻을 수 있었다고 생각한다. 다음은 내가 데이터를 쓸 시도 캐치 루프 전에 추가 된 것입니다 :.

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

나는 그래서 지금의 데이터를 읽을 수 클래스의 GetData의 (더블 [] [] 데이터) 방법을 만들었을

+0

'dataIn'은'writeData'에 매개 변수로 전달됩니다. 이것은 필수적이지 않아야합니다. 'writeData'를 어떻게 호출합니까? 코드를 게시하십시오. – niklon

관련 문제