使用原生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 ...
随机推荐
- swiper遇到的问题
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- kettle并行运行时出现「Unknown error in KarafBlueprintWatcher」
背景:在使用kettle 6进行大量数据并行抽取时,偶尔会出现「Unknown error in KarafBlueprintWatcher」的错误,详细的报错信息可以查看下面的代码块. ERROR: ...
- 数字特征值-java
题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...
- 【Paywave】VISA Paywave - ICS category selection
[ICS category Selection] PCDA & IRWIN compliantContact InterfaceMagnetic Stripe TransactionConta ...
- 记一次H5页面卡死的BUG
之前有次开发小程序内嵌页面,类似于网易星球那种,很多钻石可以手动点击收取. 该页面css动效非常多,几乎页面上除了纯色背景之外全部有动效. 也正因为如此,才做成了小程序内嵌的形式(太大了). 当多次快 ...
- 小妖精的完美游戏教室——东方PROJECT,同人,子机
//================================================================//// Copyright (C)// All Rights Re ...
- 学习笔记DL004:标量、向量、矩阵、张量,矩阵、向量相乘,单位矩阵、逆矩阵
线性代数,面向连续数学,非离散数学.<The Matrix Cookbook>,Petersen and Pedersen,2006.Shilov(1977). 标量.向量.矩阵.张量. ...
- ubuntu 安装 pycharm
添加源: $ sudo add-apt-repository ppa:mystic-mirage/pycharm 安装收费的专业版: $ sudo apt update $ sudo apt in ...
- mac下 部分服务启动,结束, 查看状态的命令
以sshd服务为例 启动sshd服务:sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 停止sshd服务:sudo laun ...
- css里px em rem特点(转)
1.px特点: 1.IE无法调整px作为单位的字体大小: 2.Firefox能够调整px.em和rem. px是像素,是相对长度单位,是相对于显示器屏幕分辨率而言的. 2.em特点: 1.em的值并不 ...