static boolean exists(String location) {
File path = new File(location);
if (path.exists()){
return true;
}
else {
return false;
}
}
static boolean checkFile(String location1) throws IOException {
if ( exists(location1) ) {
File file = new File(location1);
RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek( raf.length()-1 );
byte lastByte = raf.readByte();
raf.close();
if (lastByte == 2) {
return true;
}
else {
return false;
}
}
else {
System.out.println("File does not exist, please try again: ");
Scanner sk = new Scanner(System.in);
String newLocation = sk.nextLine();
checkFile(newLocation);
sk.close();
return false;
话虽如此,我已经用一个单独的方法检查文件是否存在,但是,我现在想通过以某种方式递归利用try-catch将上述内容压缩为单个方法:
static boolean checkFile(String location) {
try {
File file = new File(location);
}
catch (FileNotFoundException e) {
System.out.println("File does not exist, please try again: ");
Scanner sk = new Scanner(System.in);
String newLocation = sk.nextLine();
checkFile(newLocation);
}
//the following if-sentence checking whether some byte checks up.
}
第一个问题:如何使用File file
内部尝试创建新的随机访问文件?我尝试在尝试File file = null;
之前尝试初始化它,但之后它会抛出NullPointer,因为在它捕获异常之后,该方法再次被调用,文件将自动为空。
另一个想法是在try-catch
循环内do-while
,但后来我在想什么呢?我必须检查文件是否存在,考虑到我已经使用try-catch
做了什么,它变得多余了。
只要我输入的路径不是文件,然后在一个方法中继续try-catch
句子,我该怎样对if
做什么?
答案 0 :(得分:1)
如果 使用try/catch
,我真的不建议你这样做,你可以在“永远”循环中完成,就像这样。
public static FileReader readerForPromptedFile() {
Scanner keyboard = new Scanner(System.in);
while (true) {
try {
System.out.println("Please enter a file name");
String fileName = keyboard.nextLine();
return new FileReader(fileName);
} catch (FileNotFoundException e) {
System.out.println("File not found, please try again");
}
}
}
答案 1 :(得分:0)
这样的事情应该有效:
static boolean checkFile(String location) {
while (!exists(location)){
System.out.println("File does not exist, please try again: ");
Scanner sk = new Scanner(System.in);
String newLocation = sk.nextLine();
}
try {
//the following if-sentence checking whether some byte checks up.
}
catch (IOException e) {
// Handle exception
}
}
如果有合理的方法来检查它是否应该首先工作,那么使用一种可能抛出异常的方法通常不赞成 - 在这种情况下,行为不是真的异常,它&# 39;更多的前提条件。它还增加了相当大的性能开销。