java 文件下载 linux windows

首先,将我的数据文件导出到项目部署服务器的文件夹里,然后将该文件通过项目接口下载下来。

针对这个问题,展开思考

一、在本地测试的时候

        1、使用文件流将文件从一个文件夹下载到另一个文件夹

        2、假如文件路径fileUrl为 d://outputFiles/test.xlsx   下载到pathUrl   d://temp/test.xlsx

代码如下

//文件所在位置
String fileUrl = "d://outputFiles/test.xlsx ";
//文件下载位置
String pathUrl = "d://temp/test.xlsx";

 try {        
            URL url = new URL(fileUrl);
            URLConnection conn = url.openConnection();
            InputStream in = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(in);
            FileOutputStream out = new FileOutputStream(pathUrl );
            BufferedOutputStream bos = new BufferedOutputStream(out);
            byte[] buffer = new byte[4096];
            int length = bis.read(buffer);
            //保存文件
            while(length != -1)
            {
                bos.write(buf, 0, length);
                length = bis.read(buffer);
            }
            bos.close();
            bis.close();
} catch (IOException e) {
    throw new RuntimeException(e);
}

        3、用这种方式会报一个错

java.lang.RuntimeException: java.net.MalformedURLException: unknown protocol: d
	at 

说明访问本地文件需要个协议,只需要在fileUrl前加一个

"file:///"

即可下载成功

二、将项目部署到linux服务器上

        1、文件应该是在服务器某个文件夹里,比如fileUrl = "/home/files/test.xlsx"

        2、通过接口将文件下载到本地pathUrl = "d://temp/test.xlsx"

        3、用以上代码,此时依旧使用 "file:///"协议,会发现我可以找到服务器上的文件,却找不到下载的路径,难道我下载的路径也是从服务器找的?

        报错信息:

java.io.FileNotFoundException: d:/temp/test.xlsx (No such file or directory)

        这里我还没找到解决方案

三、换一个方式下载服务器上的文件

        1、这里用连接ssh的方式获取服务器上的文件,并下载到本地

代码如下

import java.io.*;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class TestRemoteConnect {
//    https://blog.csdn.net/qq_41033385/article/details/109217665
    public static void main(String[] args) {
        String path = "/home/files/test.xlsx";//Linux服务器中的文件路径
        String hostName = "";//Linux服务器的地址
        int port = 22;//SSH访问22端口
        String username = "root";//Linux服务器的用户名
        String password = "";//Linux服务器的密码
        //创建SSH连接
        Connection connect = getConnect(hostName, username, password, port);
        //下载文件
        downloadFile(path,"d:/temp/", connect);
    }


    /**
     * 创建SSH连接
     * @param hostName
     * @param username
     * @param password
     * @param port
     * @return
     */
    public static Connection getConnect(String hostName, String username, String password, int port) {
        Connection conn = new Connection(hostName, port);
        try {
            // 连接到主机
            conn.connect();
            // 使用用户名和密码校验
            boolean isconn = conn.authenticateWithPassword(username, password);
            if (!isconn) {
                System.out.println("用户名称或者是密码不正确");
            } else {
                System.out.println("服务器连接成功.");
                return conn;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 下载文件
     * @param path
     * @param conn
     */
    public static void downloadFile(String path,String filePath, Connection conn) {
        if (conn != null) {
            Session session = null;
            try {
                FileOutputStream fileOut = null;
                session = conn.openSession();
                //设置读取文件大小 102400
                session.execCommand("tail -102400 ".concat(path));
                InputStream inputStream = new StreamGobbler(session.getStdout());
                BufferedInputStream bis = new BufferedInputStream(inputStream);
                //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
                fileOut = new FileOutputStream(filePath);
                BufferedOutputStream bos = new BufferedOutputStream(fileOut);
                byte[] buf = new byte[4096];
                int length = bis.read(buf);
                //保存文件
                while(length != -1)
                {
                    bos.write(buf, 0, length);
                    length = bis.read(buf);
                }
                bos.close();
                bis.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 连接的Session和Connection对象都需要关闭
                if (session != null) {
                    session.close();
                }
                if (conn != null) {
                    conn.close();
                }
            }
        }
    }
}

直接下载成功

四、将流传到前端下载

        1、前端调用接口,配置{responseType: 'blob'}

        2、下载代码,fileUrl是绝对路径

   try {
            // fileUrl是指想要下载的文件的路径
            File file = new File(fileUrl);
            if (!file.exists()) {
                throw new RenException("文件不存在");
            }

            // 获取文件名
            String fileName = file.getName();
            fileName = URLEncoder.encode(fileName,"UTF-8");
            response.setHeader("Content-disposition","attachment;filename="+ fileName);
            FileInputStream fileInputStream = new FileInputStream(file);
            IOUtils.copy(fileInputStream,response.getOutputStream());
            response.flushBuffer();
            fileInputStream.close();
        } catch (IOException e) {
            throw new RenException(e.toString());
        }

参考博文:

java代码从Linux服务器的目录,下载目录中的文件到本地。(不是FTP,不是FTP,不是FTP)_java从linux服务器上下载文件-CSDN博客

 https://www.cnblogs.com/bpjj/p/11358499.html

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux下载Java 11,可以按以下步骤操作: 1. 打开终端并输入以下命令以更新和升级系统:sudo apt update && sudo apt upgrade 2. 输入以下命令以安装Java 11:sudo apt install openjdk-11-jdk 3. 安装后,可以通过输入以下命令来验证Java是否已正确安装:java -version 4. 如果您不想安装OpenJDK,您也可以下载Oracle Java 11。 请前往Oracle Java 11官方网站下载tar.gz文件并将其解压缩到您选择的目录。 5. 随后,您需要将Java添加到环境变量。输入以下命令以打开.bashrc文件:sudo nano ~/.bashrc 6. 在文件末尾添加以下行:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 7. 然后,按Ctrl + X,然后按Y,然后按Enter以保存更改。重新加载bashrc文件以使更改生效:source ~/.bashrc 8. 验证Java环境变量是否已正确设置:echo $JAVA_HOME 以上是在Linux下载Java 11的步骤。一旦您完成了这些步骤,您就可以开始使用Java 11来开发和运行Java应用程序。 ### 回答2: 在Linux系统上下载Java 11,首先要确认是要下载JRE(Java Runtime Environment)还是JDK(Java Development Kit)。如果你只是想运行Java程序而不需要开发,那么下载JRE就可以了。如果你需要进行Java应用程序开发,那么需要下载JDK。 可以参考以下步骤进行下载: 1.打开终端,输入以下命令,更新系统软件包列表: sudo apt-get update 2.安装Java JRE或JDK sudo apt-get install default-jre or sudo apt-get install default-jdk 3.验证Java安装是否成功 java -version 4.如果输出了Java的版本信息,则说明Java安装成功。 以上是在Ubuntu或Debian Linux发行版上的操作,如果你使用的是其他Linux发行版,请参考各发行版的官方文档进行Java的安装。 另外,如果你需要在Windows或Mac OS X上安装Java,请到Java官网上下载相应的安装程序,然后按照安装向导进行安装即可。 ### 回答3: Linux Java 11 有多种途径可以下载,最常见的方法是通过Oracle官方网站或者OpenJDK官网下载。以下是下载的步骤: 1. Oracle官方网站下载Java 11 首先,打开Oracle官方网站,进入Java SE Development Kit 11下载页面。接着,确认你选择了适合你Linux版本的文件,然后点击Download按钮。下载完成之后,你就可以使用Java 11了。 2. OpenJDK官网下载Java 11 OpenJDK是一个开源项目,也提供了Java 11的下载。你可以访问OpenJDK官网的下载页面,选择适合你的Linux平台,接着会跳转到一个新页面让你选择下载相应的文件下载完成后,你就可以使用Java 11了。 总的来说,下载Java 11的方式非常简单,只需要访问官方网站,然后选择适合你平台的文件并将其下载到本地即可。记得在安装之前检查一下是否已经安装过Java,并联网更新系统、软件包和依赖项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值