java代码实现hdfs

1

package examples;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

import java.io.*;

public class HDFSApi {

	//判断路径是否存在
	public static boolean test(Configuration conf,String path) throws IOException{
		FileSystem fs = FileSystem.get(conf);
		return fs.exists(new Path(path));
	}
	//复制文件到制定路径,若路径已存在,则进行覆盖
	public static void copyFromLocalFile(Configuration conf,String localFilePath,String remoteFilePath) throws IOException{
		FileSystem fs=FileSystem.get(conf);
		Path localPath = new Path (localFilePath);
		Path remotePath = new Path(remoteFilePath);
		//fs.copyFromLocalFile第一个参数表示是否删除源文件,第二个参数表示是否覆盖
		
		fs.copyFromLocalFile(false,true,localPath,remotePath);
		fs.close();
	}
	//追加文件内容
	public static void appendToFlie(Configuration conf,String localFilePath,String remoteFilePath) throws IOException{
		FileSystem fs = FileSystem.get(conf);
		Path remotePath = new Path(remoteFilePath);
		//
		FileInputStream in = new FileInputStream(localFilePath);
		//
		FSDataOutputStream out = fs.append(remotePath);
		//
		byte[] data = new byte[1024];
		int read = -1;
		while ((read=in.read(data))>0){
			
			out.write(data,0,read);
		}
		out.close();
		in.close();
		fs.close();
	}
	//主函数
	public static void main(String[] args){
		Configuration conf = new Configuration();
		conf.set("fs.defaultFs","http://localhost:9870");
		String localFilePath = "home/下载/text.txt";//本地路径
		String remoteFilePath = "/user/hadoop/text.txt";//hdfs路径
		String choice = "append";
		String choice2 ="overwrite";
		try {
			//判断文件是否存在
			Boolean fileExists = false;
			if(HDFSApi.test(conf,remoteFilePath)){
				fileExists= true;
				System.out.println(remoteFilePath+"已存在");
			}else {
				System.out.println(remoteFilePath+"不存在.");
			}
			//进行处理
			if(!fileExists){//文件不存在,则上传
			HDFSApi.copyFromLocalFile(conf,localFilePath,remoteFilePath);
			System.out.println(localFilePath+"已上传至 "+remoteFilePath);
			} else if(choice.equals("overwrite")){//选择覆盖
			HDFSApi.copyFromLocalFile(conf,localFilePath,remoteFilePath);
			System.out.println(localFilePath+"已覆盖"+remoteFilePath);
			} else if (choice.equals("append")){ //选择追加
			HDFSApi.appendToFlie(conf,localFilePath,remoteFilePath);
			System.out.println(localFilePath+"已追加至"+remoteFilePath);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
}

2

package example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
public class HDFSApi {
//下载文件到本地
// 判断本地路径是否已存在,若已存在,则自动进行重命名
	public static void copyToLocal(Configuration conf,String remoteFilePath,
			String localFilePath)throws IOException{
			FileSystem fs=FileSystem.get (conf);
			Path remotePath=new Path(remoteFilePath);
			File f=new File (localFilePath);
			//如果文件名存在,自动重命名
			if(f.exists()){
			System.out.println (localFilePath+"已存在.");
			Integer i=0;
			while (true){
			f=new File(localFilePath+"_"+i.toString());
			if(!f.exists()){
			localFilePath=localFilePath+" "+i.toString ();
			break;
			}
			}
			System.out.println("将重新命名为∶"+localFilePath);
			}
			//下载文件到本地
			Path localPath=new Path (localFilePath);
			fs.copyToLocalFile (remotePath,localPath);
			fs.close ();
	}
public static void main(String[] args){
Configuration conf=new Configuration();
conf.set("fs.default.name","hdfs://localhost:9000");
String localFilePath="/home/hadoop/text.txt";//本地路径
String remoteFilePath="/user/hadoop/text.txt"; //HDFs路径
	try{
HDFSApi.copyToLocal(conf,remoteFilePath,localFilePath);
System.out.println("下载完成";
	} catch(Exception e){
e.printStackTrace();
		}
	}
}

3

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
public class HDFSApi {

//读取文件内容

public static void cat(Configuration conf,string remoteFilePath)throws
IOException {
FileSystem fs=FileSystem.get (conf);
PathremotePath=new Path (remoteFilePath);
FSDataInputStream in=fs.open (remotePath);
BufferedReader d=new BufferedReader(new InputStreamReader(in));
String line=null;
while((line=d.readLine ())!=null){
System.out.println (line);
}
d.close();
in.close();
fs.close();
}

//主函数

public static void main(String[] args)(
Configuration conf=new Configuration();
conf.set("fs.default.name","hdfs://localhost:9000");
String remoteFilePath="/user/hadoop/text.txt";//HDFS路径
try {
System.out.println("读取文件∶"+remoteFilePath);
HDFSApi.cat (conf,remoteFilePath);
System.out.println("\n 读取完成";
} catch (Exception e){
e.printStackTrace ();
		}
	}
}

4

package example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
importjava.io.* ;
import java.text.SimpleDateFormat;
public class HDFSApi {

//显示指定文件的信息

public static void ls(Configuration conf,String remoteFilePath)throws
IOException{
FilesSystem fs=FileSystem.get (conf);
Path remotePath=new Path(remoteFilePath);
FileStatus[] fileStatuses=fs.listStatus(remotePath);
for(FileStatus s: fileStatuses){
System.out.println("路径∶"+s.getPath().toString());
System.out.println("权限∶"+s.getPermission().toString());
System.out.println("大小∶ "+s.getLen());
/* 返回的是时间戳,转化为时间日期格式 */
Long timeStamp=s.getModificationTime ();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date=format.format(timeStamp);
System.out.println("时间∶ "+date);
	}
fs.close();
}

//主函数

public static void main(String[] args){
Configuration conf=new Configuration ();
conf.set("fs.defaultFs","http://localhost:9870");
String remoteFilePath="/user/hadoop/text.txt";//HDFS路径
try {
System.out.println("读取文件信息∶"+remoteFilePath);
HDFSApi.ls(conf,remoteFilePath);
System.out.println("\n 读取完成");
} catch(Exception e){
e.printStackTrace ();
  		}
	}
}

5

package example;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
import java.text.SimpleDateFormat;
public class HDFSApi{
//显示指定文件夹下所有文件的信息(递归)

public static void lsDir(Configuration conf,String remoteDir)throws
IOException{
FileSystem fs=FileSystem.get (conf);
Path dirPath=new Path (remoteDir);
//递归获取目录下的所有文件
RemoteIterator<LocatedFileStatus>remoteIterator=fs.listFiles
(dirPath,true);
//输出每个文件的信息 
while(remoteIterator.hasNext ()){
FileStatus s=remoteIterator.next ();
System.out.println("路径∶"+s.getPath().toString());
System.out.println("权限∶"+s.getPermission ().toString());
System.out.println("大小∶ "+s.getLen());
Long timeStamp=s.getModificationTime ();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date= format.format(timeStamp);
System.out.println("时间∶"+date);
System.out.println ();
		}
fs.close();
}

//主函数

public static void main (String[] args){
Configuration conf=new Con figuration ();
conf.set("fs.default.name","hdfs://localhost:9000");
String remoteDir="/user/hadoop";//HDFS路径
try (
System.out.println("(递归)读取目录下所有文件的信息∶"+remoteDir));
HDFSApi.lsDir(conf,remoteDir);
System.out.println("读取完成");
} catch(Exception e){
e.printStackTrace ();
 		}
	}
}

6

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
public class HDFSApi(

// 判断路径是否存在

public static boolean test(Configuration conf,String path)throws IOException {
	FileSystem fs=FileSystem.get (conf);
	return fs.exists(new Path (path));
}


//创建目录

public static boolean mkdir(Configuration conf,String remoteDir)throws IOException{
FileSystem fs=FileSystem.get(conf);
Path dirPath=new Path (remoteDir);
boolean result=fs.mkdirs(dirPath);
fs.close ();
return result;
}

//创建文件

public static void touchz(Configuration conf,String remoteFilePath) throws IOException {
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);
FSDataOutputStream outputStream=fs.create(remotePath);
outputStream.close ();
fs.close();
}

//删除文件

public static boolean rm(Configuration conf,String remoteFilePath) throws IOException {
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);
boolean result=fs.delete(remotePath,false);
fs.close ();
return result;
}

//主函数

public static void main(String[] args) {
	Configuration conf=new Configuration();
	conf.set("fs.default.name","hdfs://localhost:9000");
	String remoteFilePath="/user/hadoop/input/text.txt";//HDFS路径
	String remoteDir="/user/hadoop/input"; //HDFS 路径对应的目录
	try {
	//判断路径是否存在,存在则删除,否则进行创建 
	if(HDFSApi.test(conf,remoteFilePath)){
	HDFSApi.rm(conf,remoteFilePath);//删除
	System.out.println("删除路径∶"+remoteFilePath);
	)}else{
	if!HDFSApi.test(conf,remoteDir))( //若目录不存在,则进行创建
	HDFSApi.mkdir(conf,remoteDir);
	System.out.println("创建文件夹∶"+remoteDir);
	}
	HDFSApi.touchz(conf,remoteFilePath);
	System.out.println("创建路径∶"+remoteFilePath);
	)
	) catch(Exception e) {
		e.printStackTrace ();
	}
}




7

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
public class HDFSApi{

//判断路径是否存在

public static boolean test(Configuration conf,Stringpath)throws
IOException {
FileSystem fs=FileSystem.get (conf);

// 判断目录是否为空
//true∶空;false∶ 非空

public static boolean isDirEmpty(Configuration conf,String remoteDir)
throws IOException {
FileSystem fs=FileSystem.get(conf);
Path dirPath=new Path (remoteDir);
RemoteIterator<LocatedFileStatus>remoteIterator=fs.listFiles
(dirPath,true);
return !remoteIterator.hasNext ();

}

//创建目录

public static boolean mkdir(Configuration conf,String remoteDir)throws
IOException {
FileSystem fs=FileSystem.get(conf);
Path dirPath=new Path (remoteDir);
boolean result=fs.mkdirs (dirPath);
fs.close ();
return result;
}
//删除目录

public static boolean rmDir(Configuration conf,String remoteDir)throws IOException {
	
	FileSystem fs=FileSystem.get(conf);
	Path dirPath=new Path (remoteDir);
	// 第二个参数表示是否递归删除所有文件 
	boolean result=fs.delete(dirPath,true);
	fs.close();
	return result;
	
}


//主函数

public static void main(String[] args){
Configuration conf=new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
String remoteDir="/user/hadoop/input";//HDFS目录
Boolean forceDelete=false;//是否强制删除
try {
/* 判断目录是否存在,不存在则创建,存在则删除 */
if(!HDFSApi.test(conf,remoteDir)){
HDFSApi.mkdir(conf,remoteDir);//创建目录
System.out.println("创建目录∶"+remoteDir);
)else (
if(HDFSApi.isDirEmpty(conf,remoteDir)|I forceDelete){
//目录为空或强制删除
HDFSApi.rmDir(conf,remoteDir);
System.out.println("删除目录∶"+remoteDir);
} else{ //目录不为空
System.out.println("目录不为空,不删除∶"+remoteDir);
		}
	}
}catch(Exception e){
	e.printStackTrace ();
		}
	}
}

8

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop. fs.*;
import java.io.*;
public class HDFSApi (
/**
*判断路径是否存在
*/
public static boolean test(Configuration conf,String path)throws
IOException {
FileSystem fs=FileSystem.get(conf);
return fs.exists (new Path (path));
}


//追加文本内容

public static void appendContentToFile(Configuration conf,String
content,String remoteFilePath)throws IOException
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path(remoteFilePath);
/*创建一个文件输出流,输出的内容将追加到文件末尾 */
FSDataOutputStream out=fs.append(remotePath);
out.write (content.getBytes ());
out.close();
fs.close();
/**
* 追加文件内容
*/
public static void appendToFile(Configuration conf,String localFilePath,
String remoteFilePath)throws IOException{
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);

FileInputStream in=new FileInputStream(localFilePath);
//创建一个文件输出流,输出的内容将追加到文件末尾
FSDataOutputStream out=fs.append(remotePath);
/*读写文件内容*/
byte[] data=new byte[1024];
int read=-1;
while((read=in.read(data))>0) {
out.write (data,0,read);
}
out.write(data,0,read);
}
out.close();
in.close();
fs.close();
}


//移动文件到本地
//移动后删除源文件

public static void moveToLocalFile(Configuration conf,String
remoteFilePath,String localFilePath)throws IOException {
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);
Path localPath=new Path (localFilePath);
fs.moveToLocalFile (remotePath,localPath);
	}

//创建文件

public static void touchz(Configuration conf,String remoteFilePath)
throws IOException {
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);
FSDataOutputStream outputStream=fs.create(remotePath);
outputStream.close ();
fs.close();
}

//主函数

public static void main(String[] args){
Configuration conf=new Configuration();
conf.set("fs.default.name","hdfs://localhost:9000");
String remoteFilePath="/user/hadoop/text.txt"; //HDFS 文件
String content="新追加的内容\n";
String choice= "after"; //追加到文件末尾
String choice= "before"; //追加到文件开头
try {
/* 判断文件是否存在 */
if(!HDFSApi.test(conf,remoteFilePath)){
System.out.println("文件不存在∶"+remoteFilePath);
}else {
if (choice.equals("after")){ //追加在文件末尾
HDFSApi.appendContentToFile(conf,content,remoteFilePath);
System.out.println("已追加内容到文件末尾"+remoteFilePath);
}else if(choice.equals("before")){//追加到文件开头
//没有相应的 API可以直接操作,因此先把文件移动到本地
//创建一个新的 HDFS,再按顺序追加内容
String localTmpPath="/user/hadoop/tmp.txt";
//移动到本地
HDFSApi.moveToLocalFile(conf,remoteFilePath,localmpPath);
//创建一个新文件
HDFSApi.touchz (conf,remoteFilePath);
//先写入新内容
HDFSApi.appendContentToFile(conf,content,remoteFilePath));
//再写入原来内容
HDFSApi.appendToFile(conf,localTmpPath,remoteFilePath);
System.out.println("已追加内容到文件开头∶"+remoteFilePath);
}} catch (Exception e){
e.printStackTrace ();

		}
	}
}

9

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;

public class HDFSApi{

//删除文件

public static boolean rm(Configuration conf,String remoteFilePath)
throws IOException {
FileSystem fs=FileSystem.get(conf);
Path remotePath=new Path (remoteFilePath);
boolean result=fs.delete (remotePath,false);
fs.close ();
return result;

}



//主函数

public static void main(String[] args){
Configuration conf=new Configuration ();
conf.set("fs.defaultFs","hdfs://localhost:9000");
String remoteFilePath="/user/hadoop/text.txt";//HDFS 文件
try {
if(HDFSApi.rm(conf,remoteFilePath)){
System.out.println("文件删除∶"+remoteFilePath);
)else {
System.out.println("操作失败(文件不存在或删除失败)");
}
} catch (Exception e){
e.printStackTrace ();

		}
	}
}

10

importorg.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.io.*;
public class HDFSApi{ 
//移动文件

public static boolean mv(Configuration conf,String remoteFilePath,
String remoteToFilePath)throws IOException {
FileSystem fs=FileSystem.get (conf);
Path srcPath=new Path (remoteFilePath);
Path dstPath=new Path (remoteToFilePath);
boolean result=fs.rename(srcPath,dstPath);
fs.close();
return result;
}


//主函数

public static void main(String[] args){
Configuration conf=new Configuration ();
conf.set("fs.defaultFs","hdfs://localhost:9000");
String remoteFilePath="hdfs:///user/hadoop/text.txt";
//源文件 HDFS 路径
String remoteToFilePath= "hdfs:///user/hadoop/new.txt";
//目的 HDFS 路径
try {
if(HDFSApi.mv(conf,remoteFilePath,remoteToFilePath))
System.out.println("将文件"+remoteFilePath+"移动到 "+
remoteToFilePath);
)else{
System.out.printiln("操作失败(源文件不存在或移动失败)";
}
} catch(Exception e){
e.printStackTrace ();
		}
	}
}

11

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
importjava.io.*;
public class MyFSDataInputStream extends FSDataInputStream{
public MyFSDataInputStream(InputStream in){
super(in);
}

//实现按行读取
//每次读入一个字符,遇到"\n"结束,返回一行内容

public static String readline(BufferedReader br)throws IOException{
char[] data=new char[1024];
int read=-1;
int off=0;
//循环执行时,br 每次会从上一次读取结束的位置继续读取
//因此该函数里,off 每次都从0开始
while((read=br.read(data,off,1))!=-1){
if(String.valueOf(data[off]).equals("\n")){
off+=1;
break; 
}
off+=1;
}
if(off>0){
return String.valueOf (data);
}else {
return null;
	}
}

//读取文件内容

public static void cat(Configuration conf,String remoteFilePath)throws
IOException {
FileSystem fs=FileSystem.get (conf);
Path remotePath=new Path (remoteFilePath);
FSDataInputStream in= fs,open (remotePath);
BufferedReaderbr=new BufferedReader(new InputStreamReader(in);
String line= null;
while((line=MyFSDataInputStream.readline(br))!=null){
System.out.println (line);
}
br.close();
in.close();
fs.close ();
}

//主函数

public static void main(String [] args){
Configuration conf=new Configuration();
conf.set("fs.defaultFs","hdfs://localhost:9000");
String remoteFilePath="/user/hadoop/text.txt";//HDFS路径
try {
MyFSDataInputStream.cat (conf,remoteFilePath);
} catch(Exception e){
e.printStackTrace ();
		}
	}
}

12

import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import java.io.*;
import java.net.URL;
public class HDFSApi {
static{
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}

//主函数

public static void main(String[] args)throws Exception{
String remoteFilePath="hdfs:///user/hadoop/text.txt";//HDFS文件
InputStream in=null;
try{
// 通过 URL对象打开数据流,从中读取数据
in=new URL(remoteFilePath).openStream();
IOUtils.copyBytes(in,System.out,4096,false);
}finally{
IOUtils.closeStream(in);
		}
	}
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值