我正在做一个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);
}
}
答案 0 :(得分:0)
由于您正在开发Web应用程序,因此您必须首先识别资源文件夹,并确保您尝试访问的文件位于该目录中。
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());
答案 1 :(得分:0)
你的代码很乱。
switch
上tokens.length
的{{1}}声明case 0
,后跟tokens[1]
。如果tokens.length == 0
,则tokens[1]
会抛出ArrayIndexOutOfBoundsException
。
实际上,if (tokens.length > 1)
之前的switch
,无法输入case 0
和case 1
。此外,您文件中的所有5行都有2个令牌,因此所有行都会输入case 2
。
第一行是port=80
,它会查找不太可能存在的文件<rootPath>\80
。
提示: tokens[0]
的值意味着什么。你应该使用它。