向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾
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中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾相关推荐
- oracle 给表指定表空间,oracle数据库创建用户指定表空间
--创建临时表空间 create temporary tablespace test_temp --test_temp表空间名称 tempfile 'E:\oracle\product\10.2.0\ ...
- 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
我试图理解错误-- 我有一个允许用户上传CSV的网络应用程序.如果文件类型不是CSV,则不会发生任何操作,页面只显示"无效的文件类型". 如果用户尝试上载无效的文件类型并反复单击触 ...
- java 字符串 转 文件路径_连接用户输入字符串转换为完整的文件路径(Java)
我写了一个简短的脚本来创建一个文件到我的桌面,文件出现了 . 我只是在main中完成了所有操作,如下所示: import java.io.*; import java.util.Scanner; pu ...
- Linux 文件与目录管理+用户管理命令(详解+练习)
1. 创建目录 mkdir NO1. 在当前路径创建一级目录 [root@rehat root]# mkdir test NO2. 在当前路径创建多级目录 [root@rehat root]# mkd ...
- Linux 文件与目录管理+用户管理命令
Linux 文件与目录管理+用户管理命令(详解+练习) 标签: it分类: Linux A linux实用命令详解(新建删除复制文件夹,挂载) + B Linux 文件与目录管理+用户管理命令练习 A ...
- 域用户指定计算机,什么是AD域,如何设置AD域用户仅登录到指定的计算机
什么是AD域? 简单理解:Active Directory域内的directory database(目录数据库)是被用来存储用户账户.计算机账户.打印机和共享文件夹等对象,而提供目录服务的组件就是A ...
- java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...
用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊? 答案:1 信息版本:手机版 电脑版 解决时间 2020-07-02 16:34 已解决 20 ...
- java 更改excel文件名称_根据Excel文件中的内容,修改指定文件夹下的文件名称
问题:根据Excel文件中内容,把文件名称由第2列,改为第1列.比如:把文件"123.jpg"修改为"1.jpg". aaarticlea/png;base64 ...
- hdfs如何查找指定目录是否文件_在shell中如何判断HDFS中的文件目录是否存在
原标题:在shell中如何判断HDFS中的文件目录是否存在 在Linux文件系统中,我们可以使用下面的Shell脚本判断某个文件是否存在: # 这里的-f参数判断$file是否存在 if[ ! -f ...
- python读出文件中的内容_Python读取文本内容
综述 在Python中,读文件主要分为三个步骤: 打开文件 . 读取内容 . 关闭文件 .一般形式如下: try: file = open('/path/to/file', 'r') # 打开文件 d ...
最新文章
- java striptrailingzeros_java – 为什么不BigDecimal.stripTrailingZeros()总是删除所有尾随零?...
- win10 java64虚拟机_Java VM 环境配置过程要点( win10,64位)
- Django的Form表单
- PHP中的foreach遍历数组
- ORACLE搭建Stream过程中报错【error收集】
- 灯珠电路图_可充电led台灯电路图
- 推荐一款优雅的 Android 学习 App
- 【基于MATLAB 的VQ声纹识别系统】
- FPGA编程中常用的经典方法及技巧(图像处理-映射技术)
- 机器学习算法工程师在做什么?
- python 进化树_Python ete3有没有一种方法来扩展系统进化树的分支?
- 83.android 简单的获取手机SIM卡卡槽数量,当前SIM卡数量。
- RDS-TMC(Traffic Message Channel)蕴藏的商机不可小视
- Vue项目区分开发环境问题
- ubuntu各种实践笔记
- Java线程Dump分析-工具TDA
- 买天猫店网店转让商标过户事项
- Hello 中国,Go官网回归中国
- 建建自学VoIP之VAD(Voice Activity Detector)和CNG(Comfort Noice Generator)
- CodeForces - 332B Maximum Absurdity 前缀和
热门文章
- android studio秒速编译Freeline的爬坑之旅
- oop基础--成员方法传参机制(重要)
- 真无线蓝牙耳机如何选?什么蓝牙耳机值得入手?南卡|华为|小米|三星蓝牙耳机哪款好用?入耳式和半入耳式蓝牙耳机推荐,选购耳机看这篇
- 【PMP】提高项目绩效的三个要点
- Java类中的字段(Fields):基本概念、分类、功能和特点
- ElasticSearch 命令执行漏洞(CVE-2014-3120)
- 20060313: 又下雪
- Oracle连接打开时出现未将对象引用设置到对象实例解决方法
- 瘦身打包Springboot(Maven)项目
- 第51周 ARTS 2019 10 06