bufferedwriter创建的空文件中没有任何内容

polhcujo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(455)

我有以下代码:

FileSystem fs = FileSystem.get(context.getConfiguration());    
Path filePath2 = Path.mergePaths(outputPath, new Path( "/SomeFile"));
            BufferedWriter writer2 = new BufferedWriter(new OutputStreamWriter(fs.create(filePath2,true)));
            writer2.write("Key: " + key.toString() + "\nValue: " + values.iterator().next().getSensCol().toString());

            writer2.close();

我将hadoop库用于其中一些类。在我执行它之后,我看到文件被创建了,但是里面什么都没有,你知道为什么吗?

2lpgd968

2lpgd9681#

没有足够的信息进行正确的诊断,但您的代码看起来是正确的。。。除了(也许)那条路。在linux系统上(至少)普通用户不能将文件写入“/”目录。
所以,我可以提出几个可能的解释:
正在写入文件,但不写入正在查看的目录。
文件打开失败(或写入失败),但应用程序正在挤压异常。。。在一些你没给我们看的代码里。
啊!看起来你在用 org.apache.hadoop.fs.FileSystem ! (这个 java.nio.file 的版本 FileSystem 类没有 get 方法。)
我不认为这改变了我的答案,除了关于能够写入“/”目录的东西。这对于hadoop fs来说是允许的。

vzgqcmou

vzgqcmou2#

使用 FileWriter 以及 BufferedWriter .

Path filePath2 = Path.mergePaths(outputPath, new Path( "/SomeFile"));

FileWriter fileWriter2 = null;
BufferedWriter writer2 = null;

try {
    fileWriter2 = new FileWriter( filePath2.toFile() );
    writer2 = new BufferedWriter( writer2 );

    writer2.write("Key: " + key.toString() );

    //if you are going to use an Iterator, you better actually use it.
    for ( Iterator iterator = col.iterator() ; iterator.hasNext() ; ) {
        writer2.write( "\nValue: " + iterator.next()
            .getSensCol().toString() );
    }

}
catch ( IOException ex ) {
    //Exception handling
}
finally {
    writer2.close();
    fileWriter2.close();
}

我希望我帮了忙。
祝你今天愉快。:)

相关问题