2017-09-19 11 views
0

사용자에게 쓰기 원하는 파일의 이름을 입력하라는 메시지를 표시하고 해당 .txt 파일을 만든 다음 해당 텍스트 줄을 작성하려고합니다. 그 파일에 저장하고 저장하십시오. do 내부에서는 저장하려는 파일의 이름에 대해 사용자 입력을 건너 뛰어 돌아 다니고 FileNotFoundException을 얻는 것으로 보이며 파일을 찾지 않아야합니다.파일을 만들 때 FileNotFound 예외가 발생합니다.

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

public class Main { 

    public static void main(String[] args) { 
     Scanner user = new Scanner(System.in); 
     Scanner docInName = null; 
     PrintWriter docOutName = null; 

     do { 
      System.out.println("Please enter the filename of the file you 
           would like to read from: "); 
      try { 
       docInName = new Scanner(new File(user.nextLine())); 
      } catch (FileNotFoundException e) { 
       System.out.println("File not found!"); 
      } 
     } while (docInName == null); 

     int lineNum = docInName.nextInt(); 
     BikePart[] bp = new BikePart[lineNum]; 
     System.out.println("please enter the max cost for a part: "); 
     int cost = user.nextInt(); 

     do { 
      System.out.println("please enter a name for the file to write to 
           (end with .txt): "); 
      String out = user.nextLine(); //PROBLEM HERE! SKIPS USER INPUT 
      try { 
       docOutName = new PrintWriter(out); 
       for (int i = 0; i < lineNum; i++) { 
        String line = docInName.nextLine(); 
        String[] elements = line.split(","); 
        bp[i] = new BikePart(elements[0], 
          Integer.parseInt(elements[1]), 
          Double.parseDouble(elements[2]), 
          Double.parseDouble(elements[3]), 
          Boolean.parseBoolean(elements[4])); 
        double temp = Double.parseDouble(elements[3]); 
        if ((temp < cost && bp[i].isOnSale() == true) 
          || (bp[i].getListPrice() < cost && 
           bp[i].isOnSale() == false)) { 
         docOutName.write(line); 
        } 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } while (docOutName == null); 
     user.close(); 
    } 

} 
+2

가능 중복 [스캐너) (다음 사용 후 꽵()을 스킵하고, nextInt() 또는 다른 nextFoo()? (https://stackoverflow.com/questions/13102045/scanner-is-skipping -nextline-after-using-next-nextint-or-other-nextfoo) –

+0

사실은 그 반대 였고 최대 비용 라인을 호출 한 후 한 줄을 더 건너 뛸 필요가있었습니다. 그래도 좋은 생각, 고마워! –

답변

1

루프를 시작하기 전에 줄 건너 뛰기 만하면됩니다.

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

public class Main { 

    public static void main(String[] args) { 
     Scanner user = new Scanner(System.in); 
     Scanner docInName = null; 
     PrintWriter docOutName = null; 

     do { 
      System.out.println("Please enter the filename of the file you would like to read from: "); 
      try { 
       docInName = new Scanner(new File(user.nextLine())); 
      } catch (FileNotFoundException e) { 
       System.out.println("File not found!"); 
      } 
     } while (docInName == null); 

     int lineNum = docInName.nextInt(); 
     BikePart[] bp = new BikePart[lineNum]; 
     System.out.println("please enter the max cost for a part: "); 
     int cost = user.nextInt(); 
     user.nextLine(); //SOLUTION HERE 

     do { 
      System.out.println("please enter a name for the file to write to (end with .txt): "); 
      String out = user.nextLine(); 
      try { 
       docOutName = new PrintWriter(out); 
       for (int i = 0; i < lineNum; i++) { 
        String line = docInName.nextLine(); 
        String[] elements = line.split(","); 
        bp[i] = new BikePart(elements[0], Integer.parseInt(elements[1]), Double.parseDouble(elements[2]), 
          Double.parseDouble(elements[3]), Boolean.parseBoolean(elements[4])); 
        double temp = Double.parseDouble(elements[3]); 
        if ((temp < cost && bp[i].isOnSale() == true) 
          || (bp[i].getListPrice() < cost && bp[i].isOnSale() == false)) { 
         docOutName.write(line); 
        } 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } while (docOutName == null); 
     user.close(); 
    } 

}