2013-03-06 57 views
1

我正在编译用于在linux机器上运行Storm Topology的maven项目。无法在运行时使用java代码在linux中创建文件

以下是Bolt Class中的一个方法,这里我想在运行时创建一个文件,其中缓冲Reader将从输入中收集数据并将其写入文件。

元组输入对象:包含要写入的数据。
/root/data/javacode/top_output.csv:文件名。
所有IO软件包都已导入代码中。

public void execute(Tuple input, BasicOutputCollector collector) { 
    String sentence = input.getString(0); 
    String[] process = sentence.split(" "); 
    File file = new File("/root/data/jcode/top_output.csv"); 
    if (!file.exists()) { 
     file.createNewFile(); 
    } 
    FileWriter fw = new FileWriter(file.getAbsoluteFile()); // line no. 36 
    BufferedWriter bw = new BufferedWriter(fw); 
    for (String proc : process) { 
     proc = proc.trim(); 
     if (!proc.isEmpty()) { 
      collector.emit(new Values(proc)); 
      bw.write(proc); // line no. 42 
     } 
    } 
    bw.close(); 
} 

每当我编译使用MVN包项目,它提供了编译错误:

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ lgassStorm --- 
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! 
[INFO] Compiling 4 source files to /root/data/lgassStorm/target/classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /root/data/lgassStorm/src/main/java/lgaas/bolts/DataNormalizer.java:[36,19] error: unreported exception IOException; must be caught or declared to be thrown 
[ERROR] /root/data/lgassStorm/src/main/java/lgaas/bolts/DataNormalizer.java:[42,13] error: unreported exception IOException; must be caught or declared to be thrown 
[INFO] 2 errors 

每当我评论的FileWriter相关的代码,它成功地工作。行号在代码中提到。 代码有什么问题?

回答

0

您需要指定函数execute会抛出IOException。

public void execute(Tuple input, BasicOutputCollector collector) throws IOException { 

或者你可以发现异常。这是为了防止其中一个IO操作失败。

0

尝试抛出IOException或将您的代码包围到TryCatch Block。

public void execute(Tuple input, BasicOutputCollector collector){ 
try{ 
your code... 
}catch (IOException e){ 
e.printStackTrace(); 
} 
} 
+0

我也试过,但是当文件不存在文件系统时,代码给出编译错误,并且如果文件已经存在,则编译成功。 – 2013-03-06 16:42:24

相关问题