先上代码:

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("\r\n".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;
}
}

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\tools.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

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

使用原生JDBC循环读取文件并持久化到数据库的更多相关文章

  1. Halcon中循环读取文件的实现以及数字与字符的转换

    在循环读取文件的位置时,常用到数字与字符的转换. 数字与字符的转换 将字符转换为数字 tuple_number(StringImageIndex,IntImageIndex)` 1 2 1 2 将数字 ...

  2. 循环读取文件夹中的图片matlab代码

    参考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323:http://blog.csdn.net/qikaihuting/art ...

  3. Day16_95_IO_循环读取文件字节流read()方法(四)

    循环读取文件字节流read()方法(四) 使用 int read(byte[] bytes) 循环读取字节流数据 import java.io.FileInputStream; import java ...

  4. Day16_94_IO_循环读取文件字节流read()方法(二)

    循环读取文件字节流read()方法 通过read()循环读取数据,但是read()每次都只能读取一个字节,频繁读取磁盘对磁盘有伤害,且效率低. import java.io.FileInputStre ...

  5. Matlab如何循环读取文件

    循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能,%如果图片是其它路径,可以用 ["路径&q ...

  6. linux 循环读取文件的每一行

    在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. ...

  7. python 3.x 循环读取文件用户登录

    import os # 导入python自带库的模块 import sys # 导入python自带库的模块 import getpass # 导入python自带库的模块 lock_file = ' ...

  8. windows 和 linux 上 循环读取文件名称的区别和方法

    function showGetFileName($type){ $url="/opt/mobile_system/gscdn"; //另一台服务器映射到linux过来的路径. # ...

  9. C#循环读取文件流,按行读取

    public Dictionary<string,string> GetSourceDisksElements(String section) { section = "[&qu ...

随机推荐

  1. C语言链表:删除有序链表中大于mink小于maxk的元素

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #define LEN sizeof( ...

  2. Deepest left leaf node in a binary tree

    Recursion selfcontained recursion global variables outside of recursion Recursion Design  Whenever r ...

  3. Hadoop学习笔记1 - 使用Java API访问远程hdfs集群

    转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...

  4. Python学习之路基础篇--09Python基础,初识函数

    函数可以分为内置函数 和 自定义函数.这次关注的主要是自定义函数.定义函数之后,就可以在任何需要它的地方调用. 1 返回值的重要性 返回值的3种情况 没有返回值 ---- 返回None 不定 retu ...

  5. md5Util

    package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...

  6. springboot启动的时候日志缺少Mapping日志等

    发现启动springboot日志不全 缺失启动日志如: 正常启动日志 解决办法: 更换较低版本的spring boot父级依赖. <parent> <groupId>org.s ...

  7. mysql数据库 事务和索引

    1.MySQL数据库特性:  原子性(atomidity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一 ...

  8. 03MYSQL数据库

    mySQL 数据库 储存数据,属于中小型数据库   默认端口号 3306  密码root sql是一门编程语言 结构化查询语言  是强类型语言(定义变量时要指定变量类型) 字符串有两种类型:  定长: ...

  9. CSS3中设置字体的抗锯齿或光滑度的属性

    刚刚接触前端开发,对于-webkit-font-smoothing: antialiased; 这个属性不了解.上网查找了一些资料. 总结一下: -webkit-font-smoothing  :  ...

  10. ODS ,EDW,DM

    ODS: 操作数据存储ODS(Operational Data Store),操作型数据仓库,最早的数据仓库模型,是数据仓库体系结构中的一个可选部分,ODS具备数据仓库的部分特征和OLTP系统的部分特 ...