2017-01-17 1 views
1

해당 파일에 한 줄의 텍스트가있는 외부 파일을 만든 다음 해당 텍스트 줄을 Java 프로그램에 인쇄하려고합니다. 나는 노력했다. 그러나 나는 문제가있다. 내 코드에서 오류가 발생하지 않고 제대로 작동하지 않습니다.Java에서 외부 파일의 텍스트 인쇄

import java.io.*; 
import java.util.*; 

public class App { 

public static void main(String[] args) { 

    String terminate = "X"; 
    String Question = ""; 
    System.out.println("I am the all-knowing Magic 8 Ball!"); 

    do { 
     Scanner scnr = new Scanner(System.in); 
     System.out.println(""); 
     System.out.println("Ask your question here or enter 'X' to exit:"); 
     Question = scnr.nextLine(); 
     continueGame(Question); 
    } while (terminate != Question); 


     String testData[] = {"test1", "test2", "test3"}; 
     writeFile(testData, "data.txt"); 
     ArrayList<String> fileContents = readFile("data.txt"); 

     if (terminate.equalsIgnoreCase(Question)) { 
     for (String contents : fileContents) { 
      System.out.println(contents); 
     }   
    } 
    } 

public static void continueGame(String Question) { 

    char terminate = 'X'; 
    char condition = Question.charAt(0); 

    if (condition == terminate) 
    { 
     System.out.println(""); 
     System.out.println("Thanks for playing!"); 
     System.exit(0); 
    } 
    try 
    { 
     Random rand = new Random(); 
     int choice; 
     choice = 1 + rand.nextInt(20); 
     responseOptions(choice, Question); 
    } 
    catch (Exception e) 
    { 
     System.out.println("Error: Invalid"); 
    } 
} 

public static void responseOptions(int choice, String answer) 
{ 
    switch (choice) 
    { 
     case 1: answer = "Response: It is certain"; break; 
     case 2: answer = "Response: It is decidely so"; break; 
     case 3: answer = "Response: Without a doubt"; break; 
     case 4: answer = "Response: Yes, definitely"; break; 
     case 5: answer = "Response: You may rely on it"; break; 
     case 6: answer = "Response: As I see it, yes"; break; 
     case 7: answer = "Response: Most likely"; break; 
     case 8: answer = "Response: Outlook good"; break; 
     case 9: answer = "Response: Yes"; break; 
     case 10: answer = "Response: Signs point to yes"; break; 
     case 11: answer = "Response: Reply hazy, try again"; break; 
     case 12: answer = "Response: Ask again later"; break; 
     case 13: answer = "Response: Better not tell you now"; break; 
     case 14: answer = "Response: Cannot predict now"; break; 
     case 15: answer = "Response: Concentrate and ask again"; break; 
     case 16: answer = "Response: Don't count on it"; break; 
     case 17: answer = "Response: My reply is no"; break; 
     case 18: answer = "Response: My sources say no"; break; 
     case 19: answer = "Response: Outlook not so good"; break; 
     case 20: answer = "Response: Very doubtful"; break; 
    } 
    System.out.println(""); 
    System.out.println(answer); 
} 

public static void writeFile(String arrayToWrite[], String filename) { 

    try { 
     PrintWriter wordWriter = new PrintWriter("filename.txt"); 
     for (String words : arrayToWrite) { 
      wordWriter.println(words + "\n"); 
     } 
    } catch (Exception e) { 
     String msg = e.getMessage(); 
     System.out.print(msg); 
    } 
} 

public static ArrayList<String> readFile(String filename) { 
    ArrayList<String> fileContents = new ArrayList(); 
    File myFile = new File(filename); 

    try { 
     Scanner scnr = new Scanner(myFile); 
     String tempStr = ""; 
     while (scnr.hasNextLine()) { 
      tempStr = scnr.nextLine(); 
      fileContents.add(tempStr); 
     } 
    } catch (Exception e) { 
     String msg = e.getMessage(); 
     System.out.println(msg); 
    } 
    return fileContents; 
} 
} 
+0

쓰는 후에'PrintWriter'를 닫으려고 했습니까? – BackSlash

+0

제대로 작동하지 않는다면 무슨 뜻입니까? 파일이 생성되지 않았거나'writeFile()'이 호출되지 않았습니까? 더 말해. –

+2

어떤면에서 제대로 작동하지 않습니까? 한 가지는 이미'println'을 사용하고 있어도 각 단어에 '\ n'을 추가하는 것입니다. – 4castle

답변

1

코드의 문제는 당신이 writeFile()에서 filename을 받고 있지만, 대신 당신이 filename.txt으로 파일을 만들고 filename로 파일을 가진 이름을 만드는 것은 아니지만. readFile()에있는 동안 아직 생성되지 않은 filename 파일을 읽지 만 new file(filename)은 파일이 존재하지 않으므로 빈 파일을 만듭니다. 이제 빈 파일을 읽는 중입니다. 그들이 당신에게 문제가 발생합니다 오류를하지 않는 한 별도의 노트를 들어, writeFile() 코드 아래

try{ 
    FileWriter fw=new FileWriter(filename); 
    for (String words : arrayToWrite) { 
     fw.write(words + "\n"); 
    } 
    fw.close(); 

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

을 넣어은 PrintWriter 또는 PrintStreamWriter를 사용하지보십시오.

+0

어떤 이유로 든 파일이 여전히 내 프로그램 폴더에 나타나지 않습니다. –

+0

필요한 코드를 가져 오기를 희망하면서 동일한 코드가 여기 @coding_insanity에서 작동합니다. 'filename' 변수가 가지고있는 것을 말해 줄 수 있습니까? –

+0

이제는 효과가있었습니다. 기본적으로 새로 고쳐야했습니다. 도움을 주셔서 감사합니다. 정말 감사합니다. 파일에 잘못된 내용이 표시되도록 코드가 표시됩니다. –

관련 문제