使用原生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 ...
随机推荐
- scrapy安装问题记录
ubuntu小白一枚,由于对于ubuntu的不了解所以导致有的问题解决不了只能白痴的重装一遍. 总结一下问题: 1.pip安装自带scrapy版本过低官方不提供维护,卸载不完全导致重装最新版不成功 # ...
- silverlight中 设置 头像(添加图片)
参考文章: http://www.cnblogs.com/wsdj-ITtech/archive/2009/08/26/1554056.html 1. ChainManager.xaml 前台 < ...
- uniapp如何将微信小程序API封装为Promise
var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/; var CALL ...
- Linux 下安装nodejs
linux 版本 uname -a Linux -29deepin-generic # SMP Fri Jul :: UTC x86_64 GNU/Linux Nodejs 版本:node-v10.1 ...
- 在ubuntu服务器上安装tomcat 9
前提条件: 确保ubuntu服务器上 已经安装 java 8 或更高版本,安装java8可以参考我的另一篇博文 通过 ppa 在ubuntu server 上安装java 8 java -versio ...
- css3的特性
增加了媒体查询.圆角边框.过渡动画效果
- 学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、查询索引、导流、word2vec
影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答.一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答排序,找到最优,是一个 ...
- java 注解 知识整理
一.前言 注解(也称为元数据)为我们在代码中添加信息提供了一种方法,它在 一定程度上将元数据与源代码文件结合在一起.它是从java 5 开始引入的.通过使用注解,我们可以将元数据保存在Java源代码之 ...
- 左耳听风-ARTS-第1周
Algorithm https://leetcode.com/problems/longest-common-prefix/ class Solution { public String longes ...
- Java泛型相关总结(上)
最近在看<Java核心技术>泛型相关的部分,总结下. 泛型程序设计是什么? 泛型编程(generic programming)是计算机编程中的一种风格,类型通过参数指定.意味着编写的代码可 ...