访问hdfs上的文件并写出到输出台
/**
* 访问hdfs上的文件并写出到输出台
* @param args
*/
public static void main(String[] args) {
try {
//将hdfs格式的url转换成系统能够识别的
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
URL url = new URL("hdfs://hadoop1:9000/hello");
InputStream in = url.openStream();
/**
* 将读取到的数据写入到文件,不需要自己控制缓冲区,也不需要自己去读取输入流
* @param in 输入流
* @param out 输出流
* @param bufferSize 换成区大小
* @param close 是否关闭流,如果是false,需要在finally中关闭
* IOUtils.closeStream(in);
*/
IOUtils.copyBytes(in, System.out, 1024, true);
} catch (Exception e) {
e.printStackTrace();
}
}
获取FileSystem
/**
* 获取FileSystem
* 使用Hadoop的fileSystem读取文件
*/
public static FileSystem getFileSystem() throws IOException,
URISyntaxException {
FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop1:9000"), new Configuration());
return fileSystem;
}
创建文件夹
/**
* 创建文件夹
* @throws URISyntaxException
*/
public static void mkdir() throws IOException, URISyntaxException {
FileSystem fileSystem = getFileSystem();
//在hdfs上创建文件夹,并返回创建是否成功的标示
boolean successful = fileSystem.mkdirs(new Path("/dir1"));
if(successful){
System.out.println("创建文件夹成功");
}
}
上传
/**
* 上传
* @throws URISyntaxException
*/
public static void putdata() throws IOException,
FileNotFoundException, URISyntaxException {
FileSystem fileSystem = getFileSystem();
//创建一个上传路径,返回输出流
FSDataOutputStream os = fileSystem.create(new Path("/dir1/readme"));
FileInputStream in = new FileInputStream("D:\Program Files\others\2345Soft\HaoZip\2345好压免责声明.txt");
IOUtils.copyBytes(in, os, 1024, true);
}
下载
/**
* 下载
* @throws URISyntaxException
*/
public static void download() throws IOException, URISyntaxException {
FileSystem fileSystem = getFileSystem();
FSDataInputStream in = fileSystem.open(new Path("hdfs://hadoop1:9000/hello"));
//关闭流需要手动关闭,System.out也是一个输出流,如果是true 下面就不会输出了
IOUtils.copyBytes(in, System.out, 1024, false);
in.close();
}
删除文件或文件夹
/**删除文件或文件夹
* true:表示是否递归删除,如果是文件,这里是true,false都是无所谓,
* 文件夹必须是true,否则报错
* @throws URISyntaxException
*/
public static void delete() throws IOException, URISyntaxException {
FileSystem fileSystem = getFileSystem();
boolean isDeleted = fileSystem.delete(new Path("/dir1"), true);
if(isDeleted){
System.out.println("删除成功");
}
}
遍历目录
/**遍历目录
* 调用FileSystem的listStatus方法
* 查看file的状态 使用FileStatus
* @throws URISyntaxException
*/
public static void list() throws IOException, URISyntaxException {
FileSystem fileSystem = getFileSystem();
FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
for (FileStatus fileStatus : listStatus) {
String isDir = fileStatus.isDir()?"目录":"文件";
String name = fileStatus.getPath().getName().toString();
System.out.println(isDir+"-->"+name);
}
}