2014-03-13 3 views
0

그래서 난 내 메인 클래스에서 파일을 읽을 수있는이 방법이, 그리고 내가이 방법에게 여러 번 사용할 필요가, 문제가,의 BufferedReader와 메소드를 호출

reader = new BufferedReader(new FileReader("how.txt")); 
    List<String> lines = new ArrayList<String>(); 
    String line = reader.readLine(); 
    while(line != null){ 
     lines.add(line); 
     line = reader.readLine(); 
    } 
    //Choose a random one from the list 
    Random r = new Random(); 
    String randString=lines.get(r.nextInt(lines.size())); 
    System.out.println(randString); 

이제 완벽하게 잘 작동 주 클래스, 그리고 내가 복사하고 내가 읽고 싶은 다른 파일에 대한 전체 메서드를 붙여 넣을 필요가 없도록이 메서드에 대한 클래스를 만들고 싶습니다. 나는 수업 만들기 위해 시도 :

public class reader { 

public static String readfile (String file) throws IOException{ 
    BufferedReader reader = new BufferedReader(new FileReader("file")); 
    List<String> lines = new ArrayList<String>(); 
    String line = reader.readLine(); 
    while(line != null){ 
     lines.add(line); 
     line = reader.readLine(); 
    } 
    //Choose a random one from the list 
    Random r = new Random(); 
    String randString=lines.get(r.nextInt(lines.size())); 
    System.out.println(randString); 

    return file; 
} 

}

을하지만이 같은 기본 클래스의 메서드를 호출 할 때 :

String randString = reader.readfile("file.txt"); 

는 말을 나에게 오류를 제공하는 방법 " reafile (String) "형식이 BufferedReader 형식에 대해 정의되지 않았습니다.

어떻게 해결할 수 있습니까? 또는 다른 클래스에서 메서드를 만들고 기본 클래스에서이 메서드를 호출하는 방법은 무엇입니까? 감사합니다 :)

+0

작성 방법에 영향을주는 몇 가지 질문이 있습니다. 여러 파일이 있습니까? 파일을 메모리에 저장하지 않으려면 파일이 길습니까? 동일한 파일에 대해이 방법을 여러 번 사용합니까? –

+0

Java 7을 사용하고 있습니까? 그렇다면'Files.readAllLines()'를 사용하십시오. – fge

+0

@fge 어디에서 입력할까요? – underthemistletoe

답변

0

귀하의 클래스 독자 개체는 모두 reader입니다. 수업 이름을 MyReader과 같은 것으로 바꾸는 것이 좋습니다. 이 명명 충돌로 인해 일부 줄이 잘못 해석됩니다. 당신이 원하는 것은 MyReader.readfile(file);, 그리고 어떤 프로그램이보고하는 것은 당신이 어딘가에 BufferedReader

+0

해당 기능을 포함하는 클래스를 기본 클래스로 가져와야합니다. –

0

reader (객체)를 보인다 유형의 reader 목적을 가지고 있기 때문에 형태가 아닌 reader (클래스)입니다 BufferedReader.readfile(file);하지만 유형 BufferedReader (다른 클래스)의. 이것은 당신이 청소 해야하는 것입니다. 클래스/객체의 이름을 약간 변경하는 것이 좋습니다. 그것이 지저분한 일종의 것입니다.

0

아마도 당신의 '독자'개체

문자열 randString = reader.readfile ("file.txt를");

은 '독자'클래스를 말하는 것이 아니라 코드에 'Reader'유형의 'BufferedReader'변수가 선언되어있을 수 있습니다. 당신은 입력 매개 변수를 사용하지 않는

BufferedReader reader = new BufferedReader(new FileReader(file)); 

0

라인

BufferedReader reader = new BufferedReader(new FileReader("file")); 

해야한다.

+0

여전히 나에게 같은 오류가 발생합니다 :/ – underthemistletoe

0

편집 : 나는 당신의 실수를 다시 일으켰습니다 !!!

이것을 읽고 생각해보십시오.

FileReader는 문자의 연결 스트림으로, 텍스트 파일에 연결됩니다. 파일을 만들어야합니다. 사용자에게 프롬프트하고 FileReader 객체에 제공하지 않는 한 문자열은이를 자르지 않습니다.

좋은 시작이 될 것이다 : 원하는 경우

import java.io.*; 
    class ReadAFile { 
     public static void main(String[] args){ 
      Scanner in = new Scanner(System.in); 
      System.out.println("ENTER FILE NAME"); 
      String fileName = in.nextLine(); 
      try{ 

       File myFile = new File(fileName); 
       FileReader fileReader = new FileReader(myFile); 
       BufferedReader reader = new BufferedReader(fileReader); 
       /* WE CHAINED THE FileReader to a BufferedReader;*/ 
       //additional operations 
      }catch(exception ex){ 
       ex.printStackTrace(); 
      } 
    } 

당신은 다른 클래스 내부의 모든 본을 넣을 수 있습니다.클래스 이름을 대문자로 만드십시오. 나는 혼란을 피하기 위해 다른 이름을지었습니다. 어쩌면 LoadFile을 시도하고 그 안에 loadFile 메소드를 만들 수 있습니다. 이

의 라인을 따라

뭔가 그런 다음 당신이해야 할 모든 파일을 전달합니다. 일단 전달되면 아마 파일의 줄을 반환하고 싶습니까? 추가 질문이 있으면 도와 드릴 수 있습니다.

+0

는 "reafile (String)"유형이 BufferedReader에 대해 정의되지 않았기 때문에 여전히 동일한 오류가 발생합니다. " – underthemistletoe

+0

오류가 발생하면 readfile을 호출하지 않습니다. 귀하의 기본 메서드 호출 – StreamingBits

+0

좀 더 설명 할 수 있습니까? 나는 당신이 내려 놓은 코드를 복사하여 붙여 넣으려고했지만 여전히 오류가 발생합니다. – underthemistletoe

관련 문제