劝倪善良。 2022-01-14 09:08 采纳率: 85.7%
浏览 27
已结题

怎么根据sql写批量下载按照顺序创建文件夹

根据客户名-项目名-附件 这种形式创建文件夹存立面 进行判断有同名的文件后面+1 2 ...

img

  • 写回答

1条回答 默认 最新

  • 猫猫爱吃鱼 2022-01-20 12:14
    关注
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    public class Main01 {
    
        private static final String DRIVER = "com.mysql.jdbc.Driver";
        private static final String URL = "jdbc:mysql://<MySQL服务器ip地址>/<数据库名>";
        private static final String USER = "<用户名>";
        private static final String PASS = "<用户密码>";
        private static final String QUERY_SQL = "select * from company";
    
        private static final File BASE_DIR = new File("<你要保存的目录路径>");
    
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            Class.forName(DRIVER);
            Connection conn = DriverManager.getConnection(URL, USER, PASS);
    
            Map<String, Integer> fileNameMap = new LinkedHashMap<String, Integer>();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(QUERY_SQL);
            String orgFileName = null;
            String fileName = null;
            int idx = 0;
            File file = null;
            InputStream is = null;
            OutputStream os = null;
    
            final int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];
            int readCount = 0;
    
            while (rs.next()) {
                orgFileName = rs.getString("file_name");
                fileName = String.format("%s-%s-%s", rs.getString("COMPANY_NAME"), rs.getString("branch_name"),
                        orgFileName);
                if (!fileNameMap.containsKey(fileName)) {
                    fileNameMap.put(fileName, 0);
                } else {
                    idx = fileNameMap.get(fileName) + 1;
                    fileNameMap.put(fileName, idx);
                }
    
                idx = fileNameMap.get(fileName);
                if (idx > 0) {
                    int index = fileName.lastIndexOf(".");
                    String ext = fileName.substring(index + 1);
                    fileName = String.format("%s(%d).%s", fileName.substring(0, index), idx, ext);
                }
    
                file = new File(BASE_DIR, fileName);
                is = rs.getBinaryStream("doc_binary");
                os = new FileOutputStream(file);
    
                while ((readCount = is.read(buffer, 0, bufferSize)) > 0) {
                    os.write(buffer, 0, readCount);
                    os.flush();
                }
    
                os.close();
                is.close();
            }
    
            rs.close();
            stmt.close();
            conn.close();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月29日
  • 已采纳回答 1月21日
  • 创建了问题 1月14日

悬赏问题

  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线