package org.hdoop.practice.util;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CopyFile {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
FileSystem hdfs=FileSystem. get(conf);
//设置本地文件
Path src= new Path("E:\\qt" );
//设置上传数据的路径
Path dst= new Path("/" );
/*
* 通过FileSystem.copyFromLocalFile(Path src,Path dst);
* 可将本地文件上传到HDFS的指定位置
* **/
hdfs.copyFromLocalFile(src, dst);
System. out.println("Upload to"+conf.get("fs.default.name"));
FileStatus[] files=hdfs.listStatus(dst);
for(FileStatus file:files){
System. out.println(file.getPath());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
SecureCRT查看结果:
2、创建HDFS文件
通过FileSystem.create(Path f)可以在HDFS上创建文件,其中f为文件的完整路径。具体实现代码如下:
package org.hdoop.practice.util;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CreateFile {
public static void main(String[] args) {
try {
Configuration conf= new Configuration();
FileSystem hdfs=FileSystem. get(conf);
byte[] buff="hello hadoop world!\n" .getBytes();
//设置文件的路径
Path dfs= new Path("/test" );
//采用FileSystem.create(Path f)创建文件
FSDataOutputStream outputStream=hdfs.create(dfs);
outputStream.write(buff, 0,buff. length);
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析:定义类CreateFile,通过Path dfs=new Path("/test");设置创建文件的路径,采用FileSystem.create(Path f);创建文件,最后通过outputStream.write(buff,0,buff.length);写入。运行结果可以通过项目浏览器和SecureCRT查看。
项目浏览器查看:
SecureCRT查看:
3、创建HDFS目录
通过FileSystem.mkdir(Path f)可在HDFS上创建文件夹,其中f为文件夹的完整路径。具体代码实现如下:
package org.hdoop.practice.util;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CreateDir {
public static void main(String[] args) {
try {
Configuration conf= new Configuration();
FileSystem hdfs=FileSystem. get(conf);
//设置文件的路径
Path dfs= new Path("/TestDir" );
//通过fileSystem.mkdirs(Path f)可在HDFS上创建文件夹
hdfs.mkdirs(dfs);
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析:上述代码主要实现了在HDFS中创建文件夹,其中创建文件夹采用FileSystem.mkdirs(Path f)方法来实现,f表示完整的路径。代码中Path dfs=new Path("/TestDir")表示设置文件夹,hfds.mkdirs(dfs)表示创建该文件夹。运行结果可以通过项目浏览器和secureCRT查看。
项目浏览器运行结果如下图:
secureCRT查看结果如下图:
4、重命名HDFS文件
通过FileSystem.rename(Path src,Path dst)可为指定的HDFS文件重命名,其中src和dst均为文件的完整路径。具体代码实现如下:
package org.hdoop.practice.util;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class Rename {
public static void main(String[] args) {
try {
//创建Configuration示例 conf
Configuration conf = new Configuration();
FileSystem hdfs=FileSystem. get(conf);
//设置旧的文件名
Path frpath= new Path("/test" );
//设置新的文件名
Path topath = new Path("/test1" );
//重新命名
boolean isRename=hdfs.rename(frpath, topath);
String result= isRename?"成功": "失败";
System. out.println("文件重命名结果为:" +result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析:上述代码实现了在HDFS上重命名文件,Path frpath=new Path("/test");设置源文件,Path topath=new Path("/test1')设置的是新文件名,hdfs.rename(frpath,topath)实现重命名。运行结果可以通过项目浏览器和SecureCRT查看。
项目浏览器运行结果如图:
SecureCRT查看运行结果:
5、删除HDFS上的文件
通过FileSystem.delete(Path f,Boolean recursive)可删除指定的HDFS文件,其中f为需要删除文件的完整路径,recursive用来确定是否进行递归删除。具体实现代码如下:
package org.hdoop.practice.util;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class DeleteFile {
public static void main(String[] args) {
try {
Configuration conf= new Configuration();
FileSystem hdfs=FileSystem. get(conf);
//删除文件的完整路径
Path delef= new Path("/test1" );
//非递归删除,这里参数false表示非递归删除
boolean isDeleted=hdfs.delete(delef, false);
//递归删除
//boolean isDeleted=hdfs.delete(delef, true);
System. out.println("Delete?" +isDeleted);
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码解析:上述代码实现了在HDFS中删除文件,首先通过Path delef=new Path("/test1")设置要删除的文件,接下来通过hdfs.delete(delef,false)实现删除文件。运行结果可以通过控制台和文件浏览器查看。
删除HDFS上的文件控制台结果如图:
6、删除HDFS上的目录
同删除文件代码一样,只需换成删除目录路径即可。如果目录下有文件,要进行递归删除。