导入依赖:
样例代码:
@SpringBootApplication
public class CopyTest implements ApplicationRunner {
private static final Logger logger = LoggerFactory.getLogger(CopyTest .class);
public static void main(String[] args) {
SpringApplication.run(CopyTest .class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
String gpip="10.154.1.32",gpport="5432",gpdbname="test",gpuser="test",gppass="123456";
Connection connection=null;
Long lines = 0L;
Statement stmt =null;
Class.forName("org.postgresql.Driver").newInstance();
connection = DriverManager.getConnection("jdbc:postgresql://" + gpip + ":" + gpport + "/" + gpdbname + "",
gpuser, gppass);
logger.info("数据库连接成功");
CopyTest itd = new CopyTest ();
Vector<String> listfile = itd.traverseFolder2("D:\\wang"); //copy的文件路径
if(listfile!=null){
for(String file:listfile){
String[] fileName= file.split("\\\\");
logger.info("文件名:" + file);
stmt = connection.createStatement();
lines=itd.copyFromFile(connection, file, "表名");
logger.info(file + " 插入多少行:" + lines);
}}
}
public Vector<String> traverseFolder2(String path) {
File file = new File(path);
Vector<String> listfile = new Vector<String>();
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
return null;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
continue;
} else {
listfile.add(file2.getAbsolutePath());
}
}
}
} else {
return null;
}
return listfile;
}
/**
* 将文件中的数据导入到数据库中
*
* @param connection 连接
* @param filePath 文件路径
* @param tableName 表名
* @return long 导入的行数
*/
public static long copyFromFile(Connection connection, String filePath, String tableName)
throws SQLException, IOException {
FileInputStream fileInputStream = null;
try {
CopyManager copyManager = new CopyManager((BaseConnection) connection);
fileInputStream = new FileInputStream(filePath);
String copyIn = "COPY " + tableName + " FROM STDIN DELIMITER ','";
return copyManager.copyIn(copyIn, fileInputStream);
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
注意:文件的头部要与copy的表中字段一一对应。