hadoop文件系统操作

来源:互联网 发布:易语言2017盗号源码 编辑:程序博客网 时间:2024/06/05 15:06

//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);}