業務常見需求:從 Excel 導出結構化數據生成文本文件。本文提供基於 JXL 庫的完整代碼,涵蓋文件創建、流式寫入、資源關閉全流程。
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
public class ExcelToTxt {
private File resultFile;
private PrintWriter writer;
public void createTxt(String path) throws IOException {
resultFile = new File(path);
resultFile.createNewFile();
writer = new PrintWriter(new FileWriter(resultFile));
}
public void writeLine(List<UserInfo> data) {
for (UserInfo info : data) {
writer.println(info.getUserName() + " " + info.getUserPass());
}
}
public void close() {
if (writer != null) {
writer.flush();
writer.close();
}
}
public static List<UserInfo> readExcel(String path) throws IOException, BiffException {
List<UserInfo> list = new ArrayList<>();
Workbook book = Workbook.getWorkbook(new File(path));
Sheet sheet = book.getSheet(0);
for (int i = 1; i < sheet.getRows(); i++) { // 跳過標題行
UserInfo info = new UserInfo();
info.setUserName(sheet.getCell(0, i).getContents());
info.setUserPass(sheet.getCell(1, i).getContents());
info.setTrueName(sheet.getCell(2, i).getContents());
list.add(info);
}
book.close();
return list;
}
public static void main(String[] args) {
ExcelToTxt converter = new ExcelToTxt();
converter.createTxt("C:\\output.txt");
List<UserInfo> data = readExcel("D:\\input.xls");
converter.writeLine(data);
converter.close();
}
}
class UserInfo {
private String userName, userPass, trueName;
// getter/setter 省略
}
PrintWriter 自帶緩衝。close() 在 finally 塊調用。getCell(列, 行),注意行列順序。