有没有办法用Java创建hdfs中的文件?
类似于FileUtils
类在apache commons中提供的内容。
如果我们touch
已存在的文件,它会将上次修改时间更新为当前时间。如果文件不存在,它将创建一个空白文件,当前时间为最后修改时间。
答案 0 :(得分:1)
java hadoop FileSystem api提供了这些类型的帮助程序。
这是一种为hdfs复制经典touch
的方法:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataOutputStream;
import java.io.IOException;
public static void touch(String filePath) throws IOException {
FileSystem hdfs = FileSystem.get(new Configuration());
Path fileToTouch = new Path(filePath);
FSDataOutputStream fos = null;
// If the file already exists, we append an empty String just to modify
// the timestamp:
if (hdfs.exists(fileToTouch)) {
fos = hdfs.append(new Path(filePath));
fos.writeBytes("");
}
// Otherwise, we create an empty file:
else {
fos = hdfs.create(new Path(filePath));
}
fos.close();
}
如果文件尚不存在,则会创建一个空文件:
hdfs.create(new Path(filePath)).close();
如果文件已存在,则将空字符串附加到文件中,以便修改时间戳:
hdfs.append(new Path(filePath)).writeBytes("");
答案 1 :(得分:0)
Configuration configuration = new Configuration();
FileSystem hdfs = FileSystem.get( new URI( "hdfs://localhost:54310" ), configuration );
Path file = new Path("hdfs://localhost:54310/s2013/batch/table.html");
if ( hdfs.exists( file )) { hdfs.delete( file, true ); }
OutputStream os = hdfs.create( file,
new Progressable() {
public void progress() {
out.println("...bytes written: [ "+bytesWritten+" ]");
} });
BufferedWriter br = new BufferedWriter( new OutputStreamWriter( os, "UTF-8" ) );
br.write("Hello World");
br.close();
hdfs.close();