使用原生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("\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循环读取文件并持久化到数据库的更多相关文章
- Halcon中循环读取文件的实现以及数字与字符的转换
在循环读取文件的位置时,常用到数字与字符的转换. 数字与字符的转换 将字符转换为数字 tuple_number(StringImageIndex,IntImageIndex)` 1 2 1 2 将数字 ...
- 循环读取文件夹中的图片matlab代码
参考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323:http://blog.csdn.net/qikaihuting/art ...
- Day16_95_IO_循环读取文件字节流read()方法(四)
循环读取文件字节流read()方法(四) 使用 int read(byte[] bytes) 循环读取字节流数据 import java.io.FileInputStream; import java ...
- Day16_94_IO_循环读取文件字节流read()方法(二)
循环读取文件字节流read()方法 通过read()循环读取数据,但是read()每次都只能读取一个字节,频繁读取磁盘对磁盘有伤害,且效率低. import java.io.FileInputStre ...
- Matlab如何循环读取文件
循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能,%如果图片是其它路径,可以用 ["路径&q ...
- linux 循环读取文件的每一行
在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. ...
- python 3.x 循环读取文件用户登录
import os # 导入python自带库的模块 import sys # 导入python自带库的模块 import getpass # 导入python自带库的模块 lock_file = ' ...
- windows 和 linux 上 循环读取文件名称的区别和方法
function showGetFileName($type){ $url="/opt/mobile_system/gscdn"; //另一台服务器映射到linux过来的路径. # ...
- C#循环读取文件流,按行读取
public Dictionary<string,string> GetSourceDisksElements(String section) { section = "[&qu ...
随机推荐
- C语言链表:删除有序链表中大于mink小于maxk的元素
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #define LEN sizeof( ...
- Deepest left leaf node in a binary tree
Recursion selfcontained recursion global variables outside of recursion Recursion Design Whenever r ...
- Hadoop学习笔记1 - 使用Java API访问远程hdfs集群
转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...
- Python学习之路基础篇--09Python基础,初识函数
函数可以分为内置函数 和 自定义函数.这次关注的主要是自定义函数.定义函数之后,就可以在任何需要它的地方调用. 1 返回值的重要性 返回值的3种情况 没有返回值 ---- 返回None 不定 retu ...
- md5Util
package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...
- springboot启动的时候日志缺少Mapping日志等
发现启动springboot日志不全 缺失启动日志如: 正常启动日志 解决办法: 更换较低版本的spring boot父级依赖. <parent> <groupId>org.s ...
- mysql数据库 事务和索引
1.MySQL数据库特性: 原子性(atomidity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一 ...
- 03MYSQL数据库
mySQL 数据库 储存数据,属于中小型数据库 默认端口号 3306 密码root sql是一门编程语言 结构化查询语言 是强类型语言(定义变量时要指定变量类型) 字符串有两种类型: 定长: ...
- CSS3中设置字体的抗锯齿或光滑度的属性
刚刚接触前端开发,对于-webkit-font-smoothing: antialiased; 这个属性不了解.上网查找了一些资料. 总结一下: -webkit-font-smoothing : ...
- ODS ,EDW,DM
ODS: 操作数据存储ODS(Operational Data Store),操作型数据仓库,最早的数据仓库模型,是数据仓库体系结构中的一个可选部分,ODS具备数据仓库的部分特征和OLTP系统的部分特 ...