2016-04-29 3 views
-2

Я занимаюсь веб-сервером, и он должен прочитать конфигурационный файл txt и назначить номер порта, каталог, файл index.html по умолчанию и т. Д. но когда он проверяет значение index.html, он продолжает говорить, что он не существует, хотя файл существует.Java Files.exists() возвращает false, даже если файл существует

TXT файл содержит следующее:

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

Я проверил файлы разрешений и, кажется, не будет заблокирован. Я пытался как .exists() и getAbsoluteFile().Exists() и возвращают ложные Вот если код для чтения в файле:

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

    } 
+1

Не могли бы вы указать значение пути к файлу непосредственно перед выполнением check.getAbsoluteFile(). Exists()? Может быть, это просто сбой в форматировании пути – whymatter

ответ

0

, поскольку вы разрабатываете веб-приложение, которое вы должны определить папку ресурсов, в первую очередь, и убедиться, что файл вы пытаетесь получить доступ к этому каталогу.

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

Ваш код - беспорядок.

switch заявление на tokens.length с 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] что-то значит. Вероятно, вы должны использовать его.

+0

Спасибо, я исправил его – anon31428

Смежные вопросы