先上代码:

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. Linux环境下nginx集群搭建

    #确保安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream, nginx1.9或以上版本 #nginx.conf文件中,添加以下内容(只供参考),这个不能放在htt ...

  2. JDK源码看ArrayList和Vector的一些区别

    最近在看JDK源码,从源码的角度记录一下ArrayList和Vector的一些区别 1.new a.不指定长度 Vector默认创建10个元素的数组 public Vector() { this(10 ...

  3. spring源码1:基本概念

    一.预习 1.如何用spring?零配置(注解)或少配置,与应用无侵入性一起运行,与主流框架无缝集成. 2.spring 是什么?spring 是 java 企业应用级框架,目的是为了简化开发:主要体 ...

  4. 开发Canvas 绘画应用(一):搭好框架

    毕业汪今年要毕业啦,毕设做的是三维模型草图检索,年前将算法移植到移动端做了一个小应用(利用nodejs搭的服务),正好也趁此机会可以将前端的 Canvas 好好学一下~~毕设差不多做完了,现将思路和代 ...

  5. 使用hibernate原生sql查询,结果集全为1的问题解决

    问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...

  6. 关于Airtest的使用探索

    一.Airtest的简介   Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具.Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖 ...

  7. 对于Vue的v-if 和 v-showi

    V-if   : 1. 是条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当的被销毁和重建. 2. 是惰性的,如果初始渲染条件为假,则什么都不做,直到条件第一次变为真的时候,开开始渲染 ...

  8. 顺序栈代码实现&&stack库

    #include<iostream> using namespace std; ; typedef int Elemtype; struct SqStack { Elemtype *bas ...

  9. superReducedString-hankerrank

    Steve has a string of lowercase characters in range ascii[‘a’..’z’]. He wants to reduce the string t ...

  10. 下一站 java

    一直都在windows的圈子里打滚,偶尔玩玩Linux, Python, Java. 可是最近聊起windows的时候,总是觉得有些不得力,比如说,windows下有IE,MSMQ,IIS,普通使用没 ...