上一节的 FileSystem.create() 方法是用来创建一个新的文件的,也就是说会覆盖原有文件。但有时我们希望在文件末尾或者开头添加新的内容,而非覆盖。
使用FileSystem.append()代替create
其余相同,FDOS对象还是用 write 方法写入,不过这次是直接写在末尾了。
// 写入文件
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; //用于创建文件系统实例,用FileSystem.create方法可以打开一个输出流,返回FSDataOutputStream
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path; // 用于创建和解决文件路径,且FileSystem的方法大部分要求必须传入Path对象
public class WriteFIle {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER"); //添加无视安全
FileSystem fs = FileSystem.get(conf);
byte[] buff = "Hello world".getBytes(); // 要写入的内容
String filename = "file1.txt"; //要写入的文件名
// FSDataOutputStream os = fs.create(new Path(filename)); //FS.create和open类似,返回一个输出流对象,创建一个文件,会覆盖原有文件
FSDataOutputStream os = fs.append(new Path(filename)); //append方法和create不同,是在文件末尾添加新内容,而非覆盖
os.write(buff,1,buff.length-1);
System.out.println("Create:"+ filename);
os.close();
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}