Web下文件上传下载的路径问题

 

工程结构

 

1.生成一个文件到指定文件夹下

复制代码
//产生一个唯一的名字
this.setFileName(String.valueOf(System.currentTimeMillis()));
String path = ServletActionContext.getServletContext().getRealPath("/template/WordExportTemplate");
//工程下的完整路径名
String filepath = path +"\\" + fileName + ".doc";




//写入文件
Writer  out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath,true), "utf-8"), 10240);
out.write("   ");
复制代码

2.将指定文件下的文件输出到客户端(将上面产生的文件输出)

复制代码
public InputStream getInputStream() throws Exception {
        create();
        String path = ServletActionContext.getServletContext().getRealPath("/template/WordExportTemplate");
        String filepath = path +"\\" + fileName + ".doc";
        //完整的路径名
        File file = new File(filepath);
        //只用返回一个输入流
        return FileUtils.openInputStream(file);
    }
复制代码

3.将客户端上传的文件以特定名字存到指定文件夹下:

复制代码
public String execute() throws Exception{
        
        ServletContext servletContext = ServletActionContext.getServletContext();
//        fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字
        String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileNameFileName);
        System.out.println(dir);
//        文件输出流,写到dir指定的目录与名字
        FileOutputStream outputStream = new FileOutputStream(dir);
//        打开上传的文件的输入流
        FileInputStream inputStream = new FileInputStream(fileName);
        byte[] buffer = new byte[1024];
        int len = 0;
//        从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中.读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
        while((len = inputStream.read(buffer))!=-1){
//            将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
            outputStream.write(buffer, 0, len);
        }
        inputStream.close();
        outputStream.close();
        return SUCCESS;
    }
复制代码

 

4.读取指定文件夹下指定名字的文件:

ServletContext servletContext = ServletActionContext.getServletContext();
//        fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字
String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileNameFileName);
File file = new File(dir);
FileInputStream openInputStream = FileUtils.openInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(openInputStream);

 

5. FileInputStream   FileOutputStream是类。可以直接读取与写。

 

构造方法

例如:

public InputStream getInputStream() throws Exception {
        create();
        String path = ServletActionContext.getServletContext().getRealPath("/template/ExcelExportTemplate");
        String filepath = path +"\\" + fileName + ".xls";
        File file = new File(filepath);
        //只用返回一个输入流
        return FileUtils.openInputStream(file);
    }

 

String path = ServletActionContext.getServletContext().getRealPath("/template");

File tempFile = new File(path, templateName + ".xls");
tempFile.delete();
tempFile.createNewFile();

FileOutputStream stream
= FileUtils.openOutputStream(tempFile);

 

 

1 ServletContext servletContext = ServletActionContext.getServletContext();
2 // fileNameFileName表示文件上传时候的名字,也可以自己用UUID定义一个新的名字
3  String dir = servletContext.getRealPath("/template/ExcelImportTemplate/"+fileName);
4 FileOutputStream outputStream = new FileOutputStream(dir);

 

posted @   QiaoZhi  阅读(5090)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示