1. ホーム
  2. java

[解決済み] java.nio.file.NoSuchFileException を解決するにはどうしたらいいですか?

2022-02-09 18:46:44

質問

私は "result.csv" というファイルを持っていて、そのファイルから特定のデータを読み込んで表示したいのです。そのファイルはeclipseのプロジェクトフォルダにあります。それでも、そのファイルを読み込むことができません。

 public static void main(String [] args) {
    int i=0;
    String filename="result.csv";
    Path pathToFile = Paths.get(filename);

    try (BufferedReader br = Files.newBufferedReader(pathToFile, StandardCharsets.US_ASCII)) { 
        // read the first line from the text file 
        String line = br.readLine(); 
        // loop until all lines are read 
        while (i<10) { 
            // use string.split to load a string array with the values from 
            // each line of 
            // the file, using a comma as the delimiter
            String[] attributes = line.split(","); 
            double x=Double.parseDouble(attributes[8]);
            double y=Double.parseDouble(attributes[9]);
            System.out.println(GeoHash.withCharacterPrecision(x, y, 10));


            // read next line before looping 
            // if end of file reached, line would be null 
            line = br.readLine(); 
            i++;
        } 
    } catch (IOException ioe) { 
            ioe.printStackTrace(); 
    } 
}

OUTPUTです。

java.nio.file.NoSuchFileException: result.csv
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source)
at java.nio.file.Files.newByteChannel(Unknown Source)
at java.nio.file.Files.newByteChannel(Unknown Source)
at java.nio.file.spi.FileSystemProvider.newInputStream(Unknown Source)
at java.nio.file.Files.newInputStream(Unknown Source)
at java.nio.file.Files.newBufferedReader(Unknown Source)
at com.uvce.cse.searchiot.geohash.TestGeoHash.main(TestGeoHash.java:19)

また、この方法を克服する方法、あるいはこの方法の代替方法があれば教えてください。

解決方法は?

問題は、アプリケーション起動時のデフォルトディレクトリが、あなたが考えているものと異なっていることです。パスを作成した直後に、次の行をコードに追加してみてください。

public static void main(String [] args) {
    int i=0;
    String filename="result.csv";
    Path pathToFile = Paths.get(filename);
    System.out.println(pathToFile.toAbsolutePath());

そうすれば、ファイルを探している場所が正確にわかります。

どのように修正するかは、あなたが決めることです。ファイル名ではなくフルパスで指定したり、ファイル名を特別な "Resources" ディレクトリに置いて相対パスで参照したり、ファイルをデフォルトのディレクトリに移動させたりすることができます。