即使文件存在,Java Files.exists()也会返回false

时间:2016-04-29 22:44:22

标签: java web server webserver

我正在做一个Web服务器,它必须读取一个txt配置文件并分配一个端口号,目录,默认的index.html文件等,但是当它检查index.html时它一直在说它即使文件存在,也不存在。

txt文件包含:

port=80
directory=c:\www
index=index.html
listing=true
connexions=5

我检查了文件权限,似乎没有被阻止。 我尝试了.exists()getAbsoluteFile().Exists(),两者都返回false 这里如果在文件中读取代码:

try {
    BufferedReader br = new BufferedReader(new FileReader(config));

    while((line = br.readLine()) != null){
        tokens = line.split("=");
        if(tokens.length > 1) {
            switch (tokens.length) {
                case 0:
                    if (Integer.parseInt(tokens[1]) > 0 && Integer.parseInt(tokens[1]) < 65535) {
                        portNumber = Integer.parseInt(tokens[1]);
                        param++;
                    } else {
                        System.err.println("Port in config file is invalid.");
                        System.exit(1);
                    }
                    break;
                case 1:
                    File check = new File(tokens[1]);
                    if (check.getAbsoluteFile().exists()) {
                        rootPath = path ? args[1] : tokens[1];
                        param++;
                    } else {
                        System.err.println("Specified directory doesn't exist in config file");
                        System.exit(1);
                    }
                    break;
                case 2:
                    File checkFile = new File(rootPath + "\\" + tokens[1]);
                    if (checkFile.getAbsoluteFile().exists()) {
                        indexFile = tokens[1];
                        param++;
                    } else {
                        System.err.println("Index file in config file doesn't exist.");
                        System.exit(1);
                    }
                    break;
                case 3:
                    if (tokens[1].toLowerCase().equals("true") || tokens[1].toLowerCase().equals("false")) {
                        list = tokens[1].equals("true");
                        param++;
                    } else {
                        System.err.println("Can't validate the list parameter in config file.");
                        System.exit(1);
                    }
                    break;
                case 4:
                    if (Integer.parseInt(tokens[1]) > 0) {
                        connNumber = Integer.parseInt(tokens[1]);
                        param++;
                    } else {
                        System.err.println("Number of connexions in config file is invalid.");
                        System.exit(1);
                    }
                    break;
                default:
                    break;
            }
        }
        else{
            System.err.println("Missing arguments in config file.");
            System.exit(1);
        }

    }

2 个答案:

答案 0 :(得分:0)

由于您正在开发Web应用程序,因此您必须首先识别资源文件夹,并确保您尝试访问的文件位于该目录中。

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile()); 

答案 1 :(得分:0)

你的代码很乱。

switchtokens.length的{​​{1}}声明case 0,后跟tokens[1]。如果tokens.length == 0,则tokens[1]会抛出ArrayIndexOutOfBoundsException

实际上,if (tokens.length > 1)之前的switch,无法输入case 0case 1。此外,您文件中的所有5行都有2个令牌,因此所有行都会输入case 2

第一行是port=80,它会查找不太可能存在的文件<rootPath>\80

提示: tokens[0]的值意味着什么。你应该使用它。