You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java垂直解析TXT文件并将地址数据存入数据库?

嘿,我来帮你搞定这个需求!要实现解析指定文本文件并把Shipto、Soldto、From对应的地址存入数据库,咱们可以分三个核心步骤来做,下面是详细的实现思路和代码示例:

1. 读取文本文件内容

首先得把文件里的内容读进Java程序里,Java 11+提供了很简洁的Files类可以直接读取,当然也可以用传统的BufferedReader兼容更低版本,这里给你两种方式的示例:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;

public class FileParser {
    public static String readFile(String filePath) throws IOException {
        // Java 11+ 简洁写法
        return Files.readString(Paths.get(filePath));
        
        // 传统BufferedReader写法(兼容更低版本)
        /*
        StringBuilder content = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                content.append(line).append(" ");
            }
        }
        return content.toString().trim();
        */
    }
}
2. 解析文本提取目标数据

你的文本格式是关键字(Shipto/Soldto/From)加对应内容,后面跟着PO相关的内容,咱们可以用正则表达式来精准提取,非贪婪匹配能避免把后续的关键字内容也包含进来。

这里的正则模式可以写成:Shipto: (.*?) Soldto: (.*?) From: (.*?) PO,每个括号里的.*?就是我们要捕获的地址内容。

代码示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DataExtractor {
    public static void extractAddresses(String fileContent) {
        // 定义正则模式
        String pattern = "Shipto: (.*?) Soldto: (.*?) From: (.*?) PO";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(fileContent);
        
        if (m.find()) {
            String shipTo = m.group(1).trim();
            String soldTo = m.group(2).trim();
            String fromAddr = m.group(3).trim();
            
            // 这里可以把这三个值传给数据库插入方法
            insertIntoDatabase(shipTo, soldTo, fromAddr);
        } else {
            System.out.println("未匹配到目标数据格式");
        }
    }
}
3. 将数据存入数据库

这里咱们先用最基础的JDBC来实现,如果你用ORM框架(比如MyBatis、Spring JPA)会更简洁,但JDBC能让你清楚底层逻辑。

首先得先创建对应的数据库表,比如:

CREATE TABLE shipping_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    shipto VARCHAR(255) NOT NULL,
    soldto VARCHAR(255) NOT NULL,
    from_addr VARCHAR(255) NOT NULL
);

然后JDBC插入数据的代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DatabaseHandler {
    // 数据库连接参数,根据你的实际配置修改
    private static final String DB_URL = "jdbc:mysql://localhost:3306/your_database";
    private static final String DB_USER = "your_username";
    private static final String DB_PASSWORD = "your_password";
    
    public static void insertIntoDatabase(String shipTo, String soldTo, String fromAddr) {
        String sql = "INSERT INTO shipping_info (shipto, soldto, from_addr) VALUES (?, ?, ?)";
        
        try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            
            pstmt.setString(1, shipTo);
            pstmt.setString(2, soldTo);
            pstmt.setString(3, fromAddr);
            
            int affectedRows = pstmt.executeUpdate();
            if (affectedRows > 0) {
                System.out.println("数据插入成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            // 这里可以根据业务需求做异常处理,比如日志记录、重试等
        }
    }
}
整合起来运行

最后把这几个部分整合到主方法里:

public class Main {
    public static void main(String[] args) {
        try {
            String filePath = "path/to/your/text/file.txt";
            String fileContent = FileParser.readFile(filePath);
            DataExtractor.extractAddresses(fileContent);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意哦:

  • 要确保你的项目里引入了对应数据库的驱动包,比如MySQL的mysql-connector-java
  • 如果文本格式有变化,比如关键字后面的分隔符不同,要调整正则表达式来适配
  • 实际项目里建议用连接池(比如HikariCP)来管理数据库连接,不要每次都创建新连接

内容的提问来源于stack exchange,提问作者DJ4186

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:51