2013-05-26 4 views
1

У меня есть сканер для чтения CSV-файла.
Файл находится в том же каталоге и .java-файлах, однако он не может найти файл.
Что я могу сделать, чтобы исправить эту проблему?Файл сканера Java

Scanner scanner = new Scanner(new File("database.csv")); 

Edit: К сожалению забыл упомянуть, что мне нужно использовать пакет сканера, потому что в следующей строке я использую разделитель.

Scanner scanner = new Scanner(new File("database.csv")); 
scanner.useDelimiter(",|\r|\n"); 

Также я работаю в IntelliJIDEA

Так вот полный код

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.*; 

public class City 
{ 
public String name; // The name of the city 
public String cont; // The continent of the city 
public int relTime; // Time relative to Hobart (eg. -14 for New York) 
public boolean dst; // Does the city use DST? 
public boolean valid; // Does the city exist? 
Date currDate; 

City(){}; // Default constructor 
City(String name, String cont, int relTime) 
{ 
    this.name = name; 
    this.cont = cont; 
    this.relTime = relTime; 
    valid = verify(); 

    if(valid) 
    { 
     currDate = new Date(System.currentTimeMillis() + (3600000 * relTime)); 
    } 
} 

City(String name, String cont, int relTime, int dstStartDay, int dstEndDay) 
{ 
    this.name = name; 
    this.cont = cont; 
    this.relTime = relTime; 
    valid = verify(); 

    if(valid) 
    { 
     currDate = new Date(System.currentTimeMillis() + (3600000 * relTime)); 
     // Is DST in effect? 
     if(currDate.after(new Date(currDate.getYear(), 3, dstStartDay, 2, 0)) && 
       currDate.before(new Date(currDate.getYear(), 11, dstEndDay, 2, 0))) 
     { 
      // It is... so 
      relTime--; 
     } 
    } 
} 

private boolean verify() 
{ 
    valid = false; 

    try 
    { 
     Scanner scanner = new Scanner(new File("\\src\\database.csv")); 
     scanner.useDelimiter(",|\r|\n"); 
     while(scanner.hasNext()) 
     { 
      String curr = scanner.next(); 
      String next = new String(); 
      if(scanner.hasNext()) 
       next = scanner.next(); 
      if(curr.contains(cont) && next.contains(name)) 
       return true; 
     } 
     scanner.close(); 
    } 
    catch(FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

    return false; 
} 
} 
+0

ли .class файлы в том же каталоге, а? –

ответ

3

Как поместить файл CSV с исходным кодом вместе, вы можете не новый файл напрямую, вы можете попробовать,

InputStream resourceAsStream = this.getClass().getResourceAsStream("database.csv"); 
    Scanner scanner = new Scanner(resourceAsStream); 
    scanner.useDelimiter(",|\r|\n"); 
+1

, это сработало отлично, за исключением того, что я использовал URL database = this.getClass(). getResource ("database.csv"); Спасибо :) –

+0

Странно, я бы поклялся, что первая строка была непосредственно частью моего ответа, и я даже не вижу upvote. –

2

При создании или чтении относительного файла, путь относительно указанного user.dir. В eclipse это часто является корнем вашего проекта.

Вы можете распечатать user.dir следующим образом:

System.out.println(System.getProperty("user.dir")); 

Это где программа ищет файл database.csv. Либо добавьте файл в этот каталог, либо используйте абсолютный путь.

0

Добавить весь путь к файлу, начиная с корневой папки проекта.

например.

Тест - это мое название проекта в Eclipse. Поэтому я должен писать

File csvFile = new File("src\\database.csv");

+0

Я пытался это сделать, но это не имело никакого значения. все еще не скомпилировал –

0

Вы не должны хранить файлы в каталоге, который также содержит файлы классов. Если вы это сделаете, вы не должны обращаться к ним как к файлу, а как к ресурсу и должны быть скопированы в папку или .jar, содержащие ваши скомпилированные файлы .class. Если файл используется только одним классом в .jar, вероятно, вы должны использовать this.getClass().getResource("database.csv");.

Недостаток заключается в том, что вы не можете написать ресурсам. Если вы хотите это сделать, я настоятельно рекомендую не использовать исходную папку для файла базы данных. Вместо этого используйте настраиваемое место в системе (например, текущую рабочую папку).

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