2017-06-04 64 views
1

我想加載資源文件夾中存在的文件,但得到一個異常。 我正在使用java 9,並且具有讀取文件的代碼的java文件存在於其他某個模塊中,並且調用代碼位於其他某個模塊中。 有人可以建議如何在這裏繼續?java 9資源文件不同模塊NoSuchFileException

enter image description here

異常堆棧跟蹤

java.nio.file.NoSuchFileException: genome-tags.csv 
    at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) 
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) 
    at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) 
    at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231) 
    at java.base/java.nio.file.Files.newByteChannel(Files.java:364) 
    at java.base/java.nio.file.Files.newByteChannel(Files.java:410) 
    at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384) 
    at java.base/java.nio.file.Files.newInputStream(Files.java:154) 
    at java.base/java.nio.file.Files.newBufferedReader(Files.java:2809) 
    at java.base/java.nio.file.Files.readAllLines(Files.java:3239) 
    at java.base/java.nio.file.Files.readAllLines(Files.java:3279) 
    at com.bhargo.filesystem.reader/com.bhargo.filesystem.reader.FileSystemReader.read(FileSystemReader.java:15) 
    at com.bhargo/com.bhargo.Main.main(Main.java:20) 

的代碼是: -

public class Main { 

     public static void main(String[] args) { 
      ServiceLoader<IReader> serviceLoader = ServiceLoader.load(IReader.class); 
      try { 
       System.out.println(serviceLoader.iterator().next().read("genome-tags.csv", Main.class).size()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 


    public interface IReader { 
    List<String> read(String fileLocation, Class clazz) throws IOException; 

    default File getFile(String fileLocation, Class clazz) { 
     URL url = clazz.getResource(fileLocation); 
     return new File(getClass().getClassLoader().getResource(fileLocation).getFile()); 
    } 
} 


    public class FileSystemReader implements IReader{ 
     @Override 
     public List<String> read(String fileLocation, Class clazz) throws IOException { 
      return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName())); 
     } 
    } 

感謝,

阿馬爾

+1

此行'返回新的文件(的getClass()getClassLoader()的getResource(fileLocation).getFile());'嘗試uing absoluatePath() –

+0

我試過/ resouces/,但我得到NPE –

+0

我試過absoluatePath()但得到相同的異常 –

回答

2

變化

public class FileSystemReader implements IReader{ 
     @Override 
     public List<String> read(String fileLocation, Class clazz) throws IOException { 
      return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getName())); 
     } 
    } 

public class FileSystemReader implements IReader{ 
     @Override 
     public List<String> read(String fileLocation, Class clazz) throws IOException { 
      return Files.readAllLines(Paths.get(getFile(fileLocation, clazz).getAbsolutePath())); 
     } 
    }