在这里,我使用了用户输入测试信用卡号,但现在我想使用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
答案 0 :(得分:0)
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
}
}
}