2011-03-30 3 views
0

.txt 파일에서 double을 읽고 목록에 모두 넣으려고합니다. 여기 .txt 파일에서 목록으로 복식을 읽는 것

지금까지 내 코드입니다 ->

(. 나는 목록에 복식을 넣어 한 파일을 요청하고 데이터 스트림을 얻고,하는 하나 개의 방법이)

public InputFile() throws MyException { 
    fileIn = null; 
    dataIn = null; 
    do { 
     filename = JOptionPane.showInputDialog("What is the file called? "); 
     try { 
      fileIn = new FileInputStream((filename + ".txt")); 
      dataIn = new DataInputStream(fileIn); 

      return; 
     } 
      catch (FileNotFoundException e) { 
      JOptionPane.showMessageDialog(null, "There is no "+filename + ".txt"); 
     } 
    } 
    while ( Question.answerIsYesTo("Do you want to retype the file name") ); 
    throw new MyException("No input file was chosen"); 
} 

그 부품이 잘 작동합니다. 인덱스 : 0, 파일 크기 : 0

어떤 아이디어

java.lang.IndexOutOfBoundsException -

 public ProcessMain() { 
     boolean EOF = false; 

    List <Double> allNumbers = new ArrayList <Double>() ; 

      try { 

       InputFile inputFile = new InputFile(); 

         while(EOF == false) { 
         try { 
          allNumbers.add(inputFile.dataIn.readDouble()); 
          } 
         catch(EOFException e){ EOF = true; } 
         } 

     // List manipulation here. I have no problems with this part. 

    } 
    catch (Exception e) { 
     System.out.println(e); 
    } 

    System.out.println(allNumbers); 

나는 다음을 얻을?

+0

'InputFile2'란 무엇입니까? 'InputFile inputFile2 = new InputFile()'을 원하셨습니까? 어떤 코드 라인이 예외를 던집니까? –

+0

예, 실수로 2 인치를 넣습니다. –

+1

어떤 줄이 예외를 던집니까? –

답변

0

아마도 "EOF = false"라인입니다. "EOF"에 "false"를 지정하고 항상 true입니다. "EOF == false"로 변경하십시오.

+0

이 변경되었습니다. 여전히 동일합니다.그래도 고마워. –

+1

아니면 (! EOF). 예 (EOF = false)는 EOF에 false를 할당하고 false로 평가합니다. 빈 배열을 제공하는 어떤 것도 읽기 전에 루프를 종료하고 따라서 –

+0

예외를 catch하고 EOFException을 버리고 루프를 중단합니다. : P –

2

DataInputStream은 실제로 이진 데이터를 읽는 데 사용됩니다. 소켓에서. 당신이 원한다고 생각하는 것은 단지 FileReader이고, 기본 또는 객체 복식 중 어느 것을 얻고 싶은지에 따라 Double.parseDouble(String) 또는 Double.valueOf(String)을 사용하여 구문 분석합니다.

입력 파일에 새 줄의 각 번호가 포함되어있는 경우 BufferedReader.readLine을 사용할 수 있습니다. 그렇지 않으면 몇 가지 간단한 구문 분석이 필요합니다. 공백 또는 쉼표로 구분 된 값을 찾습니다. 파일이 다르게 (예 : 공백 또는 쉼표) 숫자를 구분하는 경우

import java.io.*; 

public class DoubleReader { 
    public static void main(String[] args) throws IOException { 
    BufferedReader reader = new BufferedReader(new FileReader(args[0])); 
    String line = null; 
    while((line = reader.readLine()) != null) { 
     Double d = Double.valueOf(line); 
     System.err.println(d); 
    } 
    } 
} 

그러나 당신이 필요합니다 :

그래서 예를 들어, 다음과 같은 일을 할 수있는 새 줄에 각 번호가 포함 된 파일을 읽을 수 당신의 값을 추출 (파싱)하기 위해 파일을 읽는 동안 약간의 여분의/다른 작업을 할 수 있습니다.

Parsing 당신이 관심있는 비트를 추출 할 수 있도록 데이터를 토큰 화에 관한 것입니다.

+0

그래,이게 길 일거야. DataInpuStream 대신 FileReader가 필요하겠습니까? .parseDouble() 및 구문 분석에 대해 조금 더 자세히 설명해 주시겠습니까? 감사합니다. 나는 DataInputStream으로 구멍을 파고 있었다고 생각한다. –

0

DataInputStream 만이 대응하는 출력 스트림을 작성 읽는 것입니다. 텍스트 파일의 경우 FileInputStream (인코딩 지정을 기억해야 함) 주변에 을 작성한 다음 행으로 읽을 수 있도록 BufferedReader을 작성하십시오. 그런 다음 Double 클래스를 사용하여 문자열을 구문 분석하십시오.

관련 문제