2016-11-11 3 views
-2

여기에서 사용자 입력 테스트 신용 카드 번호를 사용했지만 사용자가 입력 파일을 선택할 수 있도록 JFileChooser를 사용하여이 작업을 수행하려고합니다. 신용 카드 번호를 입력하고 결과를 출력 파일에 표시하십시오. 나는 카드 번호가있는 출력 파일을 유효하게 만들지 만 회사 이름으로 카드 번호를 인쇄하려면 어떻게해야합니까?JFileChooser를 사용하여 사용자가 신용 카드 번호의 입력 파일을 선택할 수 있도록

public static void main(String[] args) throws FileNotFoundException { 
     // TODO Auto-generated method stub 
     Scanner user = new Scanner(System.in); 

     JFileChooser jfc = new JFileChooser("."); 
     int jfcUserOption = jfc.showOpenDialog(null); 
     if (jfcUserOption == JFileChooser.APPROVE_OPTION){ 
      File chosenFile = jfc.getSelectedFile(); 
      Scanner scan = new Scanner(chosenFile); 
      System.out.print("Output File Name: "); 
      String outputFileName = user.nextLine(); 
      PrintWriter output = new PrintWriter(outputFileName); 


       while(scan.hasNextLine()){ 
       long number = scan.nextLong(); 
       while(number != 0){ 
        if(isValid(number)){ 
         output.println(number + " is valid number"); 
         } 
        else{ 
         output.println(number + " is invalid number"); 
        } 


        output.close(); 

       } 
       } 
     } 
     } 

    public static boolean isValid(long number) { 
     // TODO Auto-generated method stub 
      int total = sumOfEvenPlace(number) + sumOfoddPlace(number); 

      if ((total % 10 == 0) && (preMatched(number, 1) == true)) { 
       return true; 
      } else { 
       return false; 
      } 
    } 

    private static int sumOfoddPlace(long number) { 
     // TODO Auto-generated method stub 
     int n = getSize(number); 
     int sum = 0; 
     for(int i = 1; i <= n; i += 2){ 
      sum += getDigitIndex(number, i); 
     } 
     return sum; 
    } 

    private static int sumOfEvenPlace(long number) { 
     // TODO Auto-generated method stub 
     int sum = 0; 
     int n = getSize(number); 
     for (int i = 2; i <= n; i+= 2){ 
      sum += getDigit(2 * getDigitIndex(number, i)); 
     } 

     return sum; 
    } 

    private static int getDigit(int number) { 
     // TODO Auto-generated method stub 
     int digit1 = number/10; 
     int digit2 = number % 10; 

     if(digit1 == 0){ 
      return number; 
     } 
     else{ 
      return digit1 + digit2; 
     } 

    } 

    private static int getDigitIndex(long number, int index) { 
     // TODO Auto-generated method stub 
     int digit; 
     digit = (int)(((number/Math.pow(10, index - 1))) % 10); 
     return digit; 
    } 

    private static int getSize(long digit) { 
     // TODO Auto-generated method stub 
     int digitNumber = 1; 
     while((digit = digit/10) != 0){ 
      digitNumber++; 
     } 
     return digitNumber; 
    } 

    private static int getPre(long number, int p) { 
     // TODO Auto-generated method stub 
     int digitnumber = getSize(number); 
     return (int) (number/(long) (Math.pow(10.0, (double)(digitnumber - p)))); 
    } 

    private static boolean preMatched(long number, int digit){ 

     if ((getPre(number, digit) == 3) /*|| (getPre(number, digit) == 37) */ || (getPre(number, digit) == 4) || (getPre(number, digit) == 5) || (getPre(number, digit) == 6)) { 

      //PrintWriter pw = null; 
      if (getPre(number, digit) == 3 /* && getPre(number, digit) == 37 */) { 
       //output.println(" American Express Card"); 
      } else if (getPre(number, digit) == 4) { 
       //pw.println(" Visa Card "); 
      } else if (getPre(number, digit) == 5) { 
       //pw.println("Master Card"); 
      } else if (getPre(number, digit) == 6) { 
       //pw.println("Discover Card"); 
      } 

      return true; 

     } else { 
      return false; 

     } 
    } 



    } 

내 입력 파일은 다음과 같습니다 : 여기

내 코드입니다 TEST.TXT

5535085286738004 
5443144794186700 
6011436897231072 
011600388914427 

내 출력은 다음과 같아야합니다

5535085286738004 Master Card   Valid    
5443144794186700 Master Card   Valid    
6011436897231072 Discover Card  Valid    
011600388914427  None    Invalid  

답변

0
JFileChooser fc = new JFileChooser(f); 
    fc.showOpenDialog(this); 
    if (fc.getSelectedFile() != null) { 
     return fc.getSelectedFile().getAbsolutePath(); 
    } else { 
     return "No file selected"; 
    } 

이후 testOutput.txt BufferedReader을 사용하여 행과 ca를 탐색하십시오. 모든 행에 대해 메소드를 사용할 것입니다.

BufferedReader reader = null; 

    try { 
     reader = new BufferedReader(new FileReader(file)); 
     String line; 
      while ((line = reader.readLine()) != null) { 
       if (!line.isEmpty()) { 
         long accNumber=Long.parseLong(line); 
         //do your stuff  
        } 
       } 
     }