2016-01-13 68 views
3

在下面的代碼中,我試圖將src的內容複製到dest並加載dest以打印它的內容。當文件爲空時,Java文件複製不起作用

  1. 如果我已經dest.txt可用的,它有它的一些內容,然後我看到的內容被覆蓋和內容獲取打印了。

  2. 如果文件dest.txt不存在,則會創建該文件,並將src.txt中的內容複製到其中,並打印內容。

唯一的問題是,如果dest.txt存在,空,然後我看到,從src.txt內容複製到它,但沒有被印在日誌中。

我想知道爲什麼。

public static void main(String[] args) { 
    String resourcesPath = "src/main/resources/"; 

    try 
    { 
     Path source = Paths.get(resourcesPath + "src.txt"); 
     Path destination = Paths.get(resourcesPath + "dest.txt"); 

     Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING); 

     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     InputStream input = classLoader.getResourceAsStream("dest.txt"); 
     StringWriter writer = new StringWriter(); 
     IOUtils.copy(input, writer, "utf-8"); 

     System.out.println("Properties file content is " + writer.toString()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

回答

1

你是如何打包你的應用程序的?如果該文件已存在於src/main/resources中,並且您正在創建一個jar文件,那麼該空文件將位於該jar文件中,並且getResourceAsStream()可能會從jar文件而不是文件系統中讀取該文件。

+0

爲了說明,我使用了src/main/resources,我的文件位於/ usr/local/tomcat/conf下,它們不是軟件包的一部分。 – serverfaces

+0

後續問題:爲什麼在文件系統中存在的文件上使用'getResourceAsStream()',而不是程序的一部分?不知道它會起作用。 – Vlad

+0

我明白你在說什麼了。我從src/main/resource開始,發現這個問題。然後我將它移到/ usr/local/tomcat/conf下,但忘記使用getResourceAsStream進行更改。回到我原來的問題,爲什麼當這個文件在src/main/resources下但它的內容是空的時它不工作? – serverfaces