文件相关API

package HDFS;

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

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @Author:Dapeng
 * @Discription:
 * @Date:Created in 上午 10:37 2018/10/25 0025
 */
public class HDFSAPI {
    /**
     * 生成文件系统
     * */
    public static FileSystem getHadoopFileSystem() {
        Configuration conf  = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.52.135:9000");
        // conf.set("dfs.replication","1");
        FileSystem fileSystem = null;
        try {
            fileSystem = FileSystem.get(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileSystem;
    }

    /**
     * 创建目录
     * */
    public static boolean createPath(String pathName)  {
        boolean result = false;

        //获取文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //调用 makdirs创建目录
        Path path = new Path(pathName);
        try {
            result = fileSystem.mkdirs(path);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //将文件系统关闭
            close(fileSystem);
        }

        return result;
    }

    /**
     * 创建文件写数据
     * */
    public static boolean createFile(String fileName,String content){
        boolean result =  false;
        FileSystem fileSystem = getHadoopFileSystem();
        Path path = new Path(fileName);
        try {
            //创建文件的函数
            FSDataOutputStream fsDataOutputStream = fileSystem.create(path);
            //写入数据
            fsDataOutputStream.writeUTF(content);
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            close(fileSystem);
        }
        return result;
    }

    /**
     * 上传已有的文件
     *
     * */
    public static boolean putFileToHDFS2(String srcPathName,String dstPathName){
        boolean result = false;
        //获得文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //调用copyFromLocalFile
        try {
            fileSystem.copyFromLocalFile(new Path(srcPathName),new Path(dstPathName));
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭文件系统
            close(fileSystem);
        }
        return result;
    }
    /**
     * @Author:Dapeng
     * @Description:    上传文件通过输入输出流
     */
    public static boolean putFileToHDFS(String srcPathName , String dstPathName){
        boolean result = false;
        //获取文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //上传
        try {
            //创建一个到HDFS的输出流
            FSDataOutputStream out = fileSystem.create(new Path(dstPathName));
            //创建一个本地java的输入流
            FileInputStream in = new FileInputStream(srcPathName);

            //通过一个IOUtilsd的copyBytes方法传递数据流
            IOUtils.copyBytes(in,out,4096,true);
            result = true;

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭文件系统
            close(fileSystem);
        }
        return result;
    }
    /**
     * @Author:Dapeng
     * @Description:        文件元数据
     */
    public static FileStatus[] list(String dstPathName){
        FileStatus[] list = null;
        //获取文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //获取元数据信息
        try {
            list = fileSystem.listStatus(new Path(dstPathName));
            for(FileStatus fileStatus : list) {
                //可以返回相关的一些信息
//                fileStatus.isDirectory();
//                fileStatus.isFile();
//                fileStatus.getPath().toString();
//                fileStatus.getReplication();
                System.out.println(fileStatus);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //关闭文件系统
            close(fileSystem);
        }

        return list;
    }
    /**
     * @Author:Dapeng
     * @Description:    下载文件通过输入输出流
     */
    public static boolean getFileFromHDFS(String srcPathName , String dstPathName){
        boolean result = false;
        //获取文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //下载文件
        try {
            //读入到内存
            FSDataInputStream in = fileSystem.open(new Path(srcPathName));
            //写入到文件
            FileOutputStream out = new FileOutputStream(dstPathName);
            //通过工具类链接两者
            IOUtils.copyBytes(in,out,4096,true);

            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            //关闭文件系统
            close(fileSystem);
        }

        return result;

    }

    /**
     * @Author:Dapeng
     * @Description:    删除文件
     */
    public static boolean delete(String path){
        boolean result = false;
        //获取文件系统
        FileSystem fileSystem = getHadoopFileSystem();

        //删除,第二个参数是否递归的删除
        try {
            fileSystem.delete(new Path(path) ,true);
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            close(fileSystem);
        }
        return result;
        //关闭文件系统
    }
    /**
     * @Author:Dapeng
     * @Description:    关闭文件系统
     */
    public static void close(FileSystem fileSystem){
        try {
            fileSystem.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

转载于:https://www.cnblogs.com/da-peng/p/9848303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您需要了解如何将数据库文件制作成API,并使用API链接进行访问的内容。 将数据库文件制作成API,通常需要使用服务器端框架来实现。常见的服务器端框架包括Express、Koa、Hapi等。这里以Express为例,具体实现步骤如下: 1.安装Express和相关组件 使用npm安装Express和相关组件: ``` npm install express body-parser cors mongoose ``` 其中,`body-parser`用于解析请求体,`cors`用于允许跨域请求,`mongoose`用于连接MongoDB数据库。 2.连接数据库 在代码中引入`mongoose`模块,并使用`mongoose.connect()`方法连接MongoDB数据库: ```javascript const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true }); ``` 其中,`mongodb://localhost/mydb`是数据库的连接字符串,`mydb`是数据库的名称。 3.定义数据模型 使用`mongoose.Schema()`方法定义数据模型,例如: ```javascript const userSchema = new mongoose.Schema({ name: String, age: Number, gender: String }); const User = mongoose.model('User', userSchema); ``` 其中,`User`是模型的名称,`userSchema`是模型的定义。 4.编写API接口 使用Express编写API接口,例如: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); app.use(bodyParser.json()); app.use(cors()); // 获取用户列表 app.get('/api/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.status(500).send('Internal Server Error'); } else { res.send(users); } }); }); // 添加新用户 app.post('/api/users', (req, res) => { const user = new User(req.body); user.save((err) => { if (err) { console.error(err); res.status(500).send('Internal Server Error'); } else { res.send(user); } }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 其中,`/api/users`是API的路径,GET请求获取用户列表,POST请求添加新用户。 5.使用API链接访问API 使用API链接访问API,例如: ``` GET http://localhost:3000/api/users POST http://localhost:3000/api/users ``` 其中,`http://localhost:3000`是API的主机名和端口号,`/api/users`是API的路径。 以上就是将数据库文件制作成API,并使用API链接进行访问的基本步骤。具体实现可能会根据不同的情况而有所差异,需要结合具体的需求和情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值