2013-08-27 37 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,其中包括协议部分。 –