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

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

  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/lovefaner/p/10763127.html
Copyright © 2011-2022 走看看