import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.apache.hadoop.fs.FileSystem;

import java.io.*;

public class AppendToFile {

/**

* 判断路径是否存在

*/

public static boolean test(Configuration conf, String path) {

try (FileSystem fs = FileSystem.get(conf)) {

return fs.exists(new Path(path));

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 追加文本内容

*/

public static void appendContentToFile(Configuration conf, String content,

String remoteFilePath) {

try (FileSystem fs = FileSystem.get(conf)) {

Path remotePath = new Path(remoteFilePath);

/* 创建一个文件输出流,输出的内容将追加到文件末尾 */

FSDataOutputStream out = fs.append(remotePath);

out.write(content.getBytes());

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 追加文件内容

*/

public static void appendToFile(Configuration conf, String localFilePath,

String remoteFilePath) {

Path remotePath = new Path(remoteFilePath);

try (FileSystem fs = FileSystem.get(conf);

FileInputStream in = new FileInputStream(localFilePath);) {

FSDataOutputStream out = fs.append(remotePath);

byte[] data = new byte[1024];

int read = -1;

while ((read = in.read(data)) > 0) {

out.write(data, 0, read);

}

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 移动文件到本地 移动后,删除源文件

*/

public static void moveToLocalFile(Configuration conf,

String remoteFilePath, String localFilePath) {

try (FileSystem fs = FileSystem.get(conf)) {

Path remotePath = new Path(remoteFilePath);

Path localPath = new Path(localFilePath);

fs.moveToLocalFile(remotePath, localPath);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 创建文件

*/

public static void touchz(Configuration conf, String remoteFilePath) {

try (FileSystem fs = FileSystem.get(conf)) {

Path remotePath = new Path(remoteFilePath);

FSDataOutputStream outputStream = fs.create(remotePath);

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 主函数

*/

public static void main(String[] args) {

Configuration conf = new Configuration();

conf.set("fs.defaultFS", "hdfs://master:9000");

String remoteFilePath = "/user/hadoop/test.txt"; // HDFS文件

String content = "新追加的内容\n";

//String choice = "after"; // 追加到文件末尾

String choice = "before"; // 追加到文件开头

try {

/* 判断文件是否存在 */

if (!AppendToFile.test(conf, remoteFilePath)) {

System.out.println("文件不存在: " + remoteFilePath);

} else {

if (choice.equals("after")) { // 追加在文件末尾

AppendToFile.appendContentToFile(conf, content,

remoteFilePath);

System.out.println("已追加内容到文件末尾" + remoteFilePath);

} else if (choice.equals("before")) { // 追加到文件开头

/* 没有相应的api可以直接操作,因此先把文件移动到本地,创建一个新的HDFS,再按顺序追加内容 */

String localTmpPath = "/usr/local/hadoop/tmp.txt";

AppendToFile.moveToLocalFile(conf, remoteFilePath,

localTmpPath); // 移动到本地

AppendToFile.touchz(conf, remoteFilePath); // 创建一个新文件

AppendToFile.appendContentToFile(conf, content,

remoteFilePath); // 先写入新内容

AppendToFile.appendToFile(conf, localTmpPath,

remoteFilePath); // 再写入原来内容

System.out.println("已追加内容到文件开头: " + remoteFilePath);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾相关推荐

  1. oracle 给表指定表空间,oracle数据库创建用户指定表空间

    --创建临时表空间 create temporary tablespace test_temp --test_temp表空间名称 tempfile 'E:\oracle\product\10.2.0\ ...

  2. 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃

    我试图理解错误-- 我有一个允许用户上传CSV的网络应用程序.如果文件类型不是CSV,则不会发生任何操作,页面只显示"无效的文件类型". 如果用户尝试上载无效的文件类型并反复单击触 ...

  3. java 字符串 转 文件路径_连接用户输入字符串转换为完整的文件路径(Java)

    我写了一个简短的脚本来创建一个文件到我的桌面,文件出现了 . 我只是在main中完成了所有操作,如下所示: import java.io.*; import java.util.Scanner; pu ...

  4. Linux 文件与目录管理+用户管理命令(详解+练习)

    1. 创建目录 mkdir NO1. 在当前路径创建一级目录 [root@rehat root]# mkdir test NO2. 在当前路径创建多级目录 [root@rehat root]# mkd ...

  5. Linux 文件与目录管理+用户管理命令

    Linux 文件与目录管理+用户管理命令(详解+练习) 标签: it分类: Linux A linux实用命令详解(新建删除复制文件夹,挂载) + B Linux 文件与目录管理+用户管理命令练习 A ...

  6. 域用户指定计算机,什么是AD域,如何设置AD域用户仅登录到指定的计算机

    什么是AD域? 简单理解:Active Directory域内的directory database(目录数据库)是被用来存储用户账户.计算机账户.打印机和共享文件夹等对象,而提供目录服务的组件就是A ...

  7. java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...

    用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊? 答案:1  信息版本:手机版 电脑版 解决时间 2020-07-02 16:34 已解决 20 ...

  8. java 更改excel文件名称_根据Excel文件中的内容,修改指定文件夹下的文件名称

    问题:根据Excel文件中内容,把文件名称由第2列,改为第1列.比如:把文件"123.jpg"修改为"1.jpg". aaarticlea/png;base64 ...

  9. hdfs如何查找指定目录是否文件_在shell中如何判断HDFS中的文件目录是否存在

    原标题:在shell中如何判断HDFS中的文件目录是否存在 在Linux文件系统中,我们可以使用下面的Shell脚本判断某个文件是否存在: # 这里的-f参数判断$file是否存在 if[ ! -f ...

  10. python读出文件中的内容_Python读取文本内容

    综述 在Python中,读文件主要分为三个步骤: 打开文件 . 读取内容 . 关闭文件 .一般形式如下: try: file = open('/path/to/file', 'r') # 打开文件 d ...

最新文章

  1. java striptrailingzeros_java – 为什么不BigDecimal.stripTrailingZeros()总是删除所有尾随零?...
  2. win10 java64虚拟机_Java VM 环境配置过程要点( win10,64位)
  3. Django的Form表单
  4. PHP中的foreach遍历数组
  5. ORACLE搭建Stream过程中报错【error收集】
  6. 灯珠电路图_可充电led台灯电路图
  7. 推荐一款优雅的 Android 学习 App
  8. 【基于MATLAB 的VQ声纹识别系统】
  9. FPGA编程中常用的经典方法及技巧(图像处理-映射技术)
  10. 机器学习算法工程师在做什么?
  11. python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
  12. 83.android 简单的获取手机SIM卡卡槽数量,当前SIM卡数量。
  13. RDS-TMC(Traffic Message Channel)蕴藏的商机不可小视
  14. Vue项目区分开发环境问题
  15. ubuntu各种实践笔记
  16. Java线程Dump分析-工具TDA
  17. 买天猫店网店转让商标过户事项
  18. Hello 中国,Go官网回归中国
  19. 建建自学VoIP之VAD(Voice Activity Detector)和CNG(Comfort Noice Generator)
  20. CodeForces - 332B  Maximum Absurdity   前缀和

热门文章

  1. android studio秒速编译Freeline的爬坑之旅
  2. oop基础--成员方法传参机制(重要)
  3. 真无线蓝牙耳机如何选?什么蓝牙耳机值得入手?南卡|华为|小米|三星蓝牙耳机哪款好用?入耳式和半入耳式蓝牙耳机推荐,选购耳机看这篇
  4. 【PMP】提高项目绩效的三个要点
  5. Java类中的字段(Fields):基本概念、分类、功能和特点
  6. ElasticSearch 命令执行漏洞(CVE-2014-3120)
  7. 20060313: 又下雪
  8. Oracle连接打开时出现未将对象引用设置到对象实例解决方法
  9. 瘦身打包Springboot(Maven)项目
  10. 第51周 ARTS 2019 10 06