2013-08-27 64 views
0

我有一個Java程序正在使用Java的nio文件觀察器觀看文件夾。當在該文件夾中創建了某些內容時,它將獲取該文件的名稱,並使用​​將內容設置爲字符串。然後將字符串傳遞給一個使用此String作爲打印報告參數的類。報表服務器返回錯誤,他說:通過的字符串不被視爲字符串

沒有協議: [email protected]?timezone=America/New_York & VGEN = 1377628109 & CMD = get_pg &頁面= 1名&觀衆= Java2的

它似乎不喜歡字符串的一部分,因爲Java將它視爲某種命令而不是字符串,改變了它所說的內容。我確信有一個簡單的解決方案,但我不確定如何使用它。該字符串看起來是這樣的:

的serverURL:端口/報告=回購:REPORTNAME &數據源=數據源& prompt0 = DATE(2014,1,2)

CODE:

import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.nio.file.*; 
import static java.nio.file.StandardWatchEventKinds.*; 

public class watching { 
    public static void main(String[] args) { 
     try { 
     String dirToWatch = "\\\\DIRECTORY\\PATH\\HERE\\"; 
      WatchService watcher = FileSystems.getDefault().newWatchService(); 
      Path logDir = Paths.get(dirToWatch); 
      logDir.register(watcher, ENTRY_CREATE); 
      while (true) { 
       WatchKey key = watcher.take(); 
       for (WatchEvent<?> event : key.pollEvents()) { 
        WatchEvent.Kind<?> kind = event.kind(); 

       if (kind == ENTRY_CREATE) { 
        WatchEvent<Path> ev = (WatchEvent<Path>) event; 
        Path filename = ev.context(); 
        String thisfile = filename.toString(); 
        //System.out.printf("%s was created in log dir.", filename.getFileName()); 
        FileInputStream fis = new FileInputStream(dirToWatch+thisfile); 
        InputStreamReader in = new InputStreamReader(fis, "UTF-8"); 
        String inetargs = in.toString(); 
        inetprint printer = new inetprint (inetargs); 

       } 
      } 

      key.reset(); 
     } 
    } catch (IOException | InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

}

+5

發佈您的代碼。 'java.io.InputStreamReader @ dda25b'是Un-overriden Object#toString()方法的結果。 –

回答

3

行「inetargs = in.toString()」是問題所在。它看起來像你認爲將文件的內容讀入字符串,但它不會做任何事情!您必須使用它的read()方法來讀取文件內容。

+0

哦,我明白你在說什麼了。這對我來說很渺茫。我 – broguesquadron

+0

我正如你所說的讀取行,並且字符串是肯定傳入的。但是,正如我懷疑的那樣,字符串仍然被解釋爲不僅僅是一個字符串。 沒有協議:serveraddress:端口/報告= REPORTNAME與數據源=數據源和prompt0 = DATE%282014%2C1%2C2%29時區=美國/紐約:VGEN = 1377696115&CMD = get_pg&頁= 1&觀衆= Java2的 日期應該是什麼樣子我張貼以上。有關於此的任何想法? – broguesquadron

+0

日期看起來不錯 - 它是「URL編碼」,這是一些特殊字符需要在URL中處理的方式。但是,正如錯誤消息所述,沒有*協議* - 它不會在開頭說「http://」或「https://」或「ftp://」或類似的內容。無論「inetprint」類如何使用該URL,它都需要一個完整的URL,其中包括協議部分。 –