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