• 使用原生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

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

  • 相关阅读:
    C++的高效从何而来2
    初体验ajax跨域
    ACM在线测评系统评测程序设计与实现
    高效GTD云工具 Manage Your Time
    HTTP 长连接
    使用avalon MVVM框架打造整一套jquery ui
    GhostDoc(注释生成工具)使用方法
    NUnit快速入门 笔记
    ETags
    nodejs + edge + ejs + c#
  • 原文地址:https://www.cnblogs.com/lovefaner/p/10763127.html
Copyright © 2020-2023  润新知