HDFS檔案的建立以及向檔案中寫入內容
阿新 • • 發佈:2018-11-12
package com.yc.hadoop.hdfs;
import java.net.URI;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.Progressable;
import org.apache.log4j.Logger;
/**
* 檔案的建立以及向檔案中寫入內容
* @company 源辰資訊
* @author navy
*/
public class Hadoop_HdfsApi011 {
public static void main(String[] args) {
Logger log = Logger.getLogger(Hadoop_HdfsApi011.class); // 建立日誌記錄器
try {
Configuration conf = new Configuration(); // 載入配置檔案
URI uri = new URI("hdfs://192.168.30.130:9000/"); // 連線資源位置
FileSystem fs = FileSystem.get(uri, conf); // 建立檔案系統例項物件
// 建立目錄 刪除目錄 hadoop fs -rm -f <目錄名>
Path dir = new Path("files"); // 要建立的目錄。Path為hadoop檔案物件, 類似java的File類
if (fs.exists(dir)) { // 判斷檔案是否存在
log.debug(dir + " 存在...");
//檔案存在, 換一個名字
} else {
log.debug(dir + " 不存在,開始建立...");
if (fs.mkdirs(dir)){
log.debug(dir + " 目錄建立成功...");
} else {
log.debug(dir + " 目錄建立失敗...");
}
}
// 建立檔案
Path file = new Path(dir, "data.txt");
if (fs.exists(file)) { // 檔案是否存在
log.debug(file + " 檔案存在...");
} else {
if (fs.createNewFile(file)) { // 建立檔案
log.debug(file + " 檔案建立成功...");
} else {
log.debug(file + " 檔案建立失敗...");
}
}
// 在檔案中新增 內容
FSDataOutputStream fdos = null; // 檔案系統資料輸出流
if (fs.exists(file)){ // 如果檔案存在
fdos = fs.append(file, 4096, new Progressable() {
@Override
public void progress() {
System.out.println(">>"); // 進度提示
}
});
} else { // 檔案不存在
fdos = fs.create(file, true, 4096, new Progressable() {
@Override
public void progress() {
System.out.println("..."); // 進度提示
}
});
}
// InputStream in = new FileInputStream("yc.txt");
// IOUtils.copyBytes(in, out, 4096, true);
Scanner input = new Scanner(System.in); // 掃描器物件
System.out.print("請輸入內容:");
String word = input.nextLine();
fdos.write(word.getBytes()); // 向檔案系統中的檔案中寫入內容
fdos.flush();
fdos.close();
input.close();
System.out.println("寫入資料完成...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.URI;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.Progressable;
import org.apache.log4j.Logger;
/**
* 檔案的建立以及向檔案中寫入內容
* @company 源辰資訊
* @author navy
*/
public class Hadoop_HdfsApi011 {
Logger log = Logger.getLogger(Hadoop_HdfsApi011.class); // 建立日誌記錄器
try {
Configuration conf = new Configuration(); // 載入配置檔案
URI uri = new URI("hdfs://192.168.30.130:9000/"); // 連線資源位置
FileSystem fs = FileSystem.get(uri, conf); // 建立檔案系統例項物件
Path dir = new Path("files"); // 要建立的目錄。Path為hadoop檔案物件, 類似java的File類
if (fs.exists(dir)) { // 判斷檔案是否存在
log.debug(dir + " 存在...");
//檔案存在, 換一個名字
} else {
log.debug(dir + " 不存在,開始建立...");
if (fs.mkdirs(dir)){
log.debug(dir + " 目錄建立成功...");
log.debug(dir + " 目錄建立失敗...");
}
}
// 建立檔案
Path file = new Path(dir, "data.txt");
if (fs.exists(file)) { // 檔案是否存在
log.debug(file + " 檔案存在...");
} else {
if (fs.createNewFile(file)) { // 建立檔案
log.debug(file + " 檔案建立成功...");
} else {
log.debug(file + " 檔案建立失敗...");
}
}
// 在檔案中新增 內容
FSDataOutputStream fdos = null; // 檔案系統資料輸出流
if (fs.exists(file)){ // 如果檔案存在
fdos = fs.append(file, 4096, new Progressable() {
@Override
public void progress() {
System.out.println(">>"); // 進度提示
}
});
} else { // 檔案不存在
fdos = fs.create(file, true, 4096, new Progressable() {
@Override
public void progress() {
System.out.println("..."); // 進度提示
}
});
}
// InputStream in = new FileInputStream("yc.txt");
// IOUtils.copyBytes(in, out, 4096, true);
Scanner input = new Scanner(System.in); // 掃描器物件
System.out.print("請輸入內容:");
String word = input.nextLine();
fdos.write(word.getBytes()); // 向檔案系統中的檔案中寫入內容
fdos.flush();
fdos.close();
input.close();
System.out.println("寫入資料完成...");
} catch (Exception e) {
e.printStackTrace();
}
}
}