Java读取文件存储到mysql
写了一批Lua脚本,要放到数据库里面,调用的时候进行计算,由于有太多lua脚本,就写了个程序来录入。
下面主要分三个部分:
public static String readToString(String fileName) public static void wirteToMYSQL(String string) throws FileNotFoundException public static List<String> getFileList(String strPath)
readToString,用作从lua脚本,也就是文件中读取script出来,传送一个参数就是文件夹的绝对路径。
writeToMYSQL主要进行数据库写的函数,main函数里面也就调用了这一个函数,也就是说这个函数调用了另外两个函数。
getFileList,对指定路径的文件夹进行遍历,找遍所有的lua脚本,并将lua脚本的绝对路径处理(加上\,因为java处理绝对路径需要加上)放到一个list里面。
writeToMYSQL本来是打算传个参数作为路径进去的,想想就用一次,就直接在里面写死了绝对路径。
上完整代码:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.LinkedList; import java.util.List; import com.mysql.jdbc.PreparedStatement; public class Test { public static void main(String[] args) throws IOException { wirteToMYSQL(""); } public static String readToString(String fileName) { String encoding = "UTF-8"; File file = new File(fileName); Long filelength = file.length(); byte[] filecontent = new byte[filelength.intValue()]; try { FileInputStream in = new FileInputStream(file); in.read(filecontent); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { return new String(filecontent, encoding); } catch (UnsupportedEncodingException e) { System.err.println("The OS does not support " + encoding); e.printStackTrace(); return null; } } public static void wirteToMYSQL(String string) throws FileNotFoundException { final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; final String DB_URL = "jdbc:mysql://192.168.**.***:3306/cqc"; final String USER = "***"; final String PASS = "*****"; Connection conn = null; Statement stmt = null; List<String> id = getFileList("C:\\Users\\yefeifan\\Desktop\\lua"); List<String> fileList = new LinkedList<>(); for (int i = 0; i < id.size(); i++) { fileList.add(id.get(i)); } // 得到 文件名list也就是id list C001002000_001 for (int i = 0; i < id.size(); i++) { id.set(i, id.get(i).substring(35, 49)); } // 得到script内容 List<String> scripts = new LinkedList<>(); for (int i = 0; i < fileList.size(); i++) { // System.out.println(readToString(fileList.get(i))); scripts.add(readToString(fileList.get(i))); } try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL, USER, PASS); PreparedStatement pstmt; // 执行查询 for (int i = 0; i < scripts.size(); i++) { String sql = "update capability set function_script=' " + scripts.get(i) + "' where id='" + id.get(i) + "'"; pstmt = (PreparedStatement) conn.prepareStatement(sql); pstmt.executeUpdate(); pstmt.close(); } conn.close(); } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } finally { // 关闭资源 try { if (stmt != null) stmt.close(); } catch (SQLException se2) { } // 什么都不做 try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } } public static List<String> getFileList(String strPath) { List<String> filelist = new LinkedList<String>(); 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()) { // 判断是文件还是文件夹 return null; // 获取文件绝对路径 } else if (fileName.endsWith("lua")) { // 判断文件名是否以.avi结尾 StringBuffer strFileName = new StringBuffer(files[i].getAbsolutePath()); strFileName.insert(2, '\\'); strFileName.insert(9, '\\'); strFileName.insert(19, '\\'); strFileName.insert(28, '\\'); strFileName.insert(33, '\\'); filelist.add(strFileName.toString()); } else { continue; } } } return filelist; } }