【问题标题】:JFileChooser to allow the user to select the input file of credit card numbersJFileChooser 允许用户选择信用卡号码的输入文件
【发布时间】:2016-11-11 09:27:41
【问题描述】:

在这里,我对用户输入的信用卡号进行了测试,但现在我想使用 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

我的输出应该是:testOutput.txt

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

【问题讨论】:

    标签: java loops methods jfilechooser


    【解决方案1】:
    JFileChooser fc = new JFileChooser(f);
        fc.showOpenDialog(this);
        if (fc.getSelectedFile() != null) {
            return fc.getSelectedFile().getAbsolutePath();
        } else {
            return "No file selected";
        }
    

    之后使用BufferedReader遍历行并调用每一行的方法

    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     
                        }
                    }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2011-09-08
      • 2011-03-13
      • 1970-01-01
      • 2022-01-03
      • 2017-02-08
      • 2016-04-08
      相关资源
      最近更新 更多