FSDataOutputStream实现追加写

在用Hadoop api时,会遇见一个情况,每次都会覆盖原来的内容

        FileSystem fs=getFs();
        FSDataOutputStream fSDataOutputStream= fs.create(new Path("/user/lf_by_pro/zba_dwa.db/zhanggf/a.txt"));
        fSDataOutputStream.write(123); // 2次 第2次会覆盖第一次
        fSDataOutputStream.write("啧啧".getBytes("UTF-8"));
        fSDataOutputStream.flush();
        fSDataOutputStream.close();

提供一种方法 append

        FileSystem fs=getFs();
        String filePath = "/user/lf_by_pro/zba_dwa.db/zhanggf/c.txt";
        FSDataOutputStream fileOutputStream = null;
        Path hdfsPath = new Path(filePath);
        try {
            if (!fs.exists(hdfsPath)) {
                fileOutputStream = fs.create(hdfsPath,false);
            }else{
                fileOutputStream = fs.append(hdfsPath);
            }
            fileOutputStream.writeUTF("789"); //字节文件
            fileOutputStream.write("嘿哈".getBytes());
            fsDataOutputStream.writeBytes(line+"\n"); // linux上需要换行需要手动\n
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                fs.close();
            }
        }
发布了131 篇原创文章 · 获赞 79 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/qq_31780525/article/details/101223646