zoukankan      html  css  js  c++  java
  • 使用原生JDBC循环读取文件并持久化到数据库

    先上代码:

    package com.demo.common.service;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    
    
    
    
    public class ReadFileService {
        
        private static Integer counts = 0;
        
        private static Connection conn = null;
        private static PreparedStatement pre = null;
        
        //基础信息
        public static void getBase(String strPath) { 
            File dir = new File(strPath);
            File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
            List<String> filelist = new ArrayList<String>();
            if (files != null ) {
                for (int i = 0; i < files.length; i++) {
                    String fileName = files[i].getName();
                    String filetype = "";
                    String filePath = "";
                    String xmmc = "";
                    if (files[i].isDirectory()) { // 判断是否文件夹,如果是文件夹则一直遍历
                        getBase(files[i].getAbsolutePath());
                    } else { // 判断文件后缀
                        filelist.add(fileName);
                        filePath = files[i].getAbsolutePath().substring(0, files[i].getAbsolutePath().lastIndexOf("\")+1);
                        if(!"".equals(filePath))filelist.add(filePath);
                        xmmc = fileName.substring(fileName.indexOf("年")-4, fileName.indexOf("."));
                        if(!"".equals(xmmc))filelist.add(xmmc);
                            if(fileName.endsWith("pdf")){
                                filetype = "12";
                            }else{
                                filetype = "11";
                            }
                        filelist.add(filetype);
                        String sql = "insert into g_files_db values (sys_guid(), ?, ?, ?, ?, to_char(sysdate,'yyyy-MM-dd'))";
                        try {
                            //int result = DataBaseHelper.update(sql, new Object[]{fileName,filePath,xmmc,filetype});
                            pre = conn.prepareStatement(sql);
                            pre.setString(1, fileName);
                            pre.setString(2, filePath);
                            pre.setString(3, xmmc);
                            pre.setString(4, filetype);
                            int result = pre.executeUpdate();
                            counts = counts + result;
                        } catch (Exception e) {
                            e.printStackTrace();
                            counts = -1;
                            return;
                        }
                        
                    } 
                }
                
            }
        }
        
        //坐标信息
        public static void getCoordinate(String strPath) { 
            File dir = new File(strPath);
            File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
            List<String> filelist = new ArrayList<String>();
            if (files != null ) {
                for (int i = 0; i < files.length; i++) {
                    String fileName = files[i].getName();
                    String filetype = "";
                    String filePath = "";
                    String xmmc = "";
                    if (files[i].isDirectory()) { // 判断是否文件夹,如果是文件夹则一直遍历
                        getCoordinate(files[i].getAbsolutePath());
                    } else { // 判断文件后缀
                        filelist.add(fileName);
                        filePath = files[i].getAbsolutePath().substring(0, files[i].getAbsolutePath().lastIndexOf("\")+1);
                        if(!"".equals(filePath))filelist.add(filePath);
                            xmmc = fileName.substring(fileName.indexOf("年")-4, fileName.indexOf("."));
                        if(!"".equals(xmmc))filelist.add(xmmc);
                        if(fileName.endsWith("prj")){
                            filetype = "32";
                        }else if(fileName.endsWith("dbf")){
                            filetype = "33";
                        }else if(fileName.endsWith("sbn")){
                            filetype = "34";
                        }else if(fileName.endsWith("sbx")){
                            filetype = "35";
                        }else if(fileName.endsWith("shp")){
                            filetype = "31";
                        }else if(fileName.endsWith("shp.xml")){
                            filetype = "36";
                        }else if(fileName.endsWith("shx")){
                            filetype = "37";
                        }else{
                            filetype = "40";
                        }
                        filelist.add(filetype);
                        String sql = "insert into g_files_db values (sys_guid(), ?, ?, ?, ?, to_char(sysdate,'yyyy-MM-dd'))";
                        try {
                            //int result = DataBaseHelper.update(sql, new Object[]{fileName,filePath,xmmc,filetype});
                            pre = conn.prepareStatement(sql);
                            pre.setString(1, fileName);
                            pre.setString(2, filePath);
                            pre.setString(3, xmmc);
                            pre.setString(4, filetype);
                            int result = pre.executeUpdate();
                            counts = counts + result;
                        } catch (Exception e) {
                            e.printStackTrace();
                            counts = -2;
                            return;
                        }
                        
                    } 
                }
                
            }
        }
        
        //1,首先需要找到目录为“项目清单”的文件夹
        public static void getDirectory(String strPath) {
            File dir = new File(strPath);
            File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
            //String fileDirectory = "";
            if (files != null ) {
                for (int i = 0; i < files.length; i++) {
                    String fileName = files[i].getName();
                    if (files[i].isDirectory()) { // 判断是否是对应的目录
                        if(fileName.contains("项目清单")){
                            getType(files[i].getAbsolutePath());   //调用方法,查找是否包含“项目调查表”、“坐标”文件夹。
                        }
                        else getDirectory(files[i].getAbsolutePath());
                    }else{
                        continue;
                    } 
                }
                
            }
        }
        
        //2.找到基础信息目录和坐标目录,文件夹需要创建合理
        public static void getType(String strPath) {
            File dir = new File(strPath);
            File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
            if (files != null ) {
                for (int i = 0; i < files.length; i++) {
                    String fileName = files[i].getName();
                    if (files[i].isDirectory()) { // 判断是文件还是文件夹
                        if(fileName.contains("项目调查表")){
                            getBase(files[i].getAbsolutePath());
                        }else if(fileName.contains("坐标")){
                            getCoordinate(files[i].getAbsolutePath());
                        }else getType(files[i].getAbsolutePath());
                    }else{
                        continue;
                    }
                }
            }
        }
        
        //将所有shp格式的文件写入到文件中
        public static void writeSHP(String path){
            File file = new File(path);
            String sql = "select filepath || regexp_substr(filename, '[^.]+', 1, 1) filename from G_FILES_DB where type = '31'";
            try {
                if(!file.exists()){
                    file.createNewFile();
                }
                FileOutputStream outStream = new FileOutputStream(file,true);
                pre = conn.prepareStatement(sql);
                ResultSet re = pre.executeQuery();
                while(re.next()){
                    outStream.write(re.getString(1).getBytes("utf-8"));
                    outStream.write("
    ".getBytes("utf-8"));
                }
                outStream.close();
                //counts = 0;
            } catch (Exception e) {
                e.printStackTrace();
            }
            counts = 0;
        }
        
        //方法入口
        public static void main(String[] args) {
            Properties prop = read();
            String path = prop.getProperty("file.path");
            String savePath = prop.getProperty("file.savePath");
            String url = prop.getProperty("file.url");
            String user = prop.getProperty("file.user");
            String psd = prop.getProperty("file.password");
            conn = getConn(url, user, psd);
            getDirectory(path);
            if(counts < 0){
                System.out.println("数据已存在,再次插入失败!");
            }else{
                System.out.println("更新了"+counts+"条数据");
                writeSHP(savePath);
                closeConn();
            }
        }
        
         //获取连接
            public static Connection getConn(String url,String user,String psd){
                try {
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    conn = DriverManager.getConnection(url,user,psd);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
                return conn;
            }
        
            //关闭所有连接
            public static void closeConn (){
                try {
                    if(pre != null){
                        pre.close();
                        pre = null;
                    }
                    if(conn != null){
                        conn.close();
                        conn = null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                
            }
            
            //获取配置文件访问对象
            public static Properties read() {
                Properties pro = new Properties(); 
                File file = new File("C:\EIfilePath\application.properties");
                try {
                    FileInputStream in = new FileInputStream(file);
                    pro.load(in);
                } catch (Exception e) {
                    System.out.println(e);
                }
                return pro;
            }
    }
    View Code

    1,类中的方法主要是根据需要遍历的目的文件夹进行遍历,根据类型的不同,存入到数据库中,同时也包括了JDBC对象的创建、使用、关闭。同时将部分数据写入到txt文件中。

    2,除了Java文件外,还需要创建一个配置文件,配置文件中配置了遍历目的文件夹,数据库信息,写入字符串到哪个文件。

    在eclipse等IDE中直接运行主函数即可。

    3,如果使用cmd窗口直接运行class文件,则需要注意以下几点:

      1),在cmd中输入:javac -encoding utf-8 ReadFileService.java                  //ReadFileService是类名;-encoding utf-8设置编码格式,如果不设置,且类中有中文,则会报错。

      2),编译完成后,再执行命令:java ReadFileService                                //执行命令前,要确保Java文件同目录下有对应的配置文件,且在配置文件中,所需配置都配置无误。

    4,说下环境变量配置问题,由于使用cmd运行class文件,且类中涉及与数据库交互问题,则需要在classpath中配置驱动jar包路径,这里以Oracle为例吧。

    .;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar;C:ojdbc6.jar            // .; 注意不要忘记

    .class文件,.properties配置文件一定在同一目录下,因为程序中使用的是通过获取.class文件的路径然后获取.properties文件的。

    5,application.properties中的属性配置

    file.path=C:\EIfilePath
    file.url=jdbc:oracle:thin:@172.16.1.23:1521:orcl
    file.user=nfb_Devs_v5
    file.password=1qazxsw2
    file.savePath = C:\EIfilePath\SHP.txt

    类似如此的循环遍历功能,需要文件夹及文件的命名规则要一直,要保持一定的统一标准。

  • 相关阅读:
    leetcode 1301. 最大得分的路径数目
    LeetCode 1306 跳跃游戏 III Jump Game III
    LeetCode 1302. 层数最深叶子节点的和 Deepest Leaves Sum
    LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target
    LeetCode 1299. 将每个元素替换为右侧最大元素 Replace Elements with Greatest Element on Right Side
    acwing 239. 奇偶游戏 并查集
    acwing 238. 银河英雄传说 并查集
    acwing 237程序自动分析 并查集
    算法问题实战策略 MATCHORDER 贪心
    Linux 安装Redis全过程日志
  • 原文地址:https://www.cnblogs.com/lovefaner/p/10763127.html
Copyright © 2011-2022 走看看