hadoop文件系统操作

//hadoop创建文件和删除文件、创建文目录和删除目录


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根
		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		//目录  判断目录是否存在  存在删除  不存在创建
		if(fs.exists(new Path("/NEWDIR"))){		//判断文件(目录)是否已经存在
			fs.delete(new Path("/NEWDIR"));			//如果已经存在就将文件删除
			System.out.println("NEWDIR目录已经存在,已将其删除");
		}
		else{
			fs.mkdirs(new Path("/NEWDIR"));		//不存在 则在hadoop下创建一个新的目录结构
			System.out.println("NEWDIR目录不存在,已创建目录NEWDIR");
		}

		//文件  判断文件是否存在 存在删除  不存在创建
		if(fs.exists(new Path("/newfile"))){		//判断文件(目录)是否已经存在
			fs.delete(new Path("/newfile"));			//如果已经存在就讲文件删除
			System.out.println("newfile文件已存在,已将文件删除");
		}
		else{
			FSDataOutputStream fout = fs.create(new Path("/newfile"));	//创建hdfs的输出流  输出到newfile中去(自动创建newfile文件)
			System.out.println("newfile文件不存在,已创建文件newfile");	
		}
		System.out.println("完成");
}


/*
 *输出目录下的所有文件以及文件的信息
 *1.listStatus()方法

 */


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		FileStatus[] fl =  fs.listStatus(new Path("/"));		//获取此文件目录下的文件对象信息列表
		for(FileStatus ff : fl)//用forech循环遍历文件对象信息
		{
			System.out.println("文件地址信息"+ff.getPath().toString());//输出文件的地址信息(getPath())
			System.out.println("文件大小信息"+ff.getLen());//输出文件的大小信息(getLen())
			System.out.println("文件创建时间信息"+ff.getAccessTime());//输出文件的创建时间的信息getAccessTime()
			System.out.println("文件所有者信息"+ff.getOwner());//输出文件的所有者getOwner()
			//ff的get方法还有很多,在这里不在载一一例举,请读者自行百度
		}
		System.out.println("完成");
}

//hadoop内部的输入和输出流程


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象
		
		FSDataInputStream fin = fs.open(new Path("/intall.log"));	//创建了一个hdfs输入流 与/intall.log文件之间建立关系

		//read(byte,int,int)方法
		byte[] b =new byte[24];//创建一个数组用来存储文件
		fin.seek(2);//第二个字节变成了第一位
		fin.read(b, 0, 9);//相当于从第2个开始读取读取9(长度)个字符
		System.out.println(new String(b));//将b数组转换为string类型的输出出来  也可以用toString方法进行操作

		//read(byte)
		byte[] bb = new byte[24];//创建byte的数组
		fin.read(bb);		//读取数组bb大小的内容并将内容存放在bb中
		System.out.println(new String(bb));		//将读取的内容输出
		

		if(fs.exists(new Path("/newfile"))){	//判断文件是否存在  用来输出
			fs.delete(new Path("/newfile"));	//如果存在将其删除
		}

		FSDataOutputStream fout = fs.create(new Path("/newfile"));	//创建hdfs的输出流  输出到newfile中去(自动创建newfile文件)
		fout.write(b);		//将上面的输入流(fin)的内容(intall.log内的2-11个字节的内容)输出到输出流中去
		
		fin.close();		//关闭hdfs的输入流
		fout.close();		//关闭hdfs的输出流
		System.out.println("完成");
	}


/*
 *文件的复制
 * 1.不用hadoop的类来实现

 */


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		//将读取的内容打印出来
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); //设置url的协议
		URL  url1 = new URL("hdfs://hadoop0:9000/intall.log");//找到文件的路径,创建了一个对象  hdfs://hadoop0:9000表示接口、/intall.log表示文件
		InputStream in = url1.openStream();//打开hadoop的文件
		IOUtils.copy(in, System.out);//文件打印出来

		OutputStream out = new FileOutputStream(new File("/newfile"));		//创建一个linux的输出流
		IOUtils.copy(in,out);		//将文件输出到linux下/newfile文件中
		System.out.println("完成");
}


/*
 *文件复制
 * 2.用hadoop的类来实现

 */


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		FSDataInputStream fin = fs.open(new Path("/intall.log"));		//创建hdfs的输入流
		FSDataOutputStream fout = fs.create(new Path("/newdir/install.log"));		//创建hdfs的输出流
		IOUtils.copy(fin, fout);	//将输入流和输出流链接 实现复制
}

//上传文件


public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		InputStream in = new FileInputStream("/intall.log");//linux的输入流
        	FSDataOutputStream fout = fs.create(new Path("/newdir/install.log"));//hdfs的输出流
        	IOUtils.copy(in, fout);

}

//文件下载(有文件再下载)

public static void main(String[] args) throws IOException {
		// TODO 自动生成的方法存根

		Configuration conf = new Configuration();		//读取文件配置的对象
		FileSystem fs = FileSystem.get(conf);		//获取默认文件系统的对象

		FSDataInputStream fin = fs.open(new Path("/newdir/install.log"));//hdfs的输入流(此文件必须已经存在)
        	OutputStream out = new FileOutputStream("/intall.log");//linnux的输出流
        	IOUtils.copy(fin, out);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值