Java多级目录的生成

Java中文件路径的生成File.midir()必须是一级一级的,父目录必须存在才可以创建子目录,不支持父目录跟子目录同时创建。在这里,我写了个方法,可以将父目录和子目录一起创建。方便重用。
此方法可以用File.mkdirs()替代。



/**
* 创建绝对路径(包含多级)
*
* @param header
* 绝对路径的前半部分(已存在)
* @param tail
* 绝对路径的后半部分(第一个和最后一个字符不能是/,格式:123/258/456)
* @return 新创建的绝对路径
*/
public String makeDir(String header, String tail) {
String[] sub = tail.split("/");
File dir = new File(header);
for (int i = 0; i < sub.length; i++) {
if (!dir.exists()) {
dir.mkdir();
}
File dir2 = new File(dir + File.separator + sub[i]);
if (!dir2.exists()) {
dir2.mkdir();
}
dir = dir2;
}
return dir.toString();
}
Java中,生成Word文档的多级目录通常通过Apache POI库来实现,它是HSSF和XSSF两个主要模块的组合,分别对应Excel的旧版(HSSF)和新版本(XSSF),以及处理Microsoft Office Open XML (OOXML) 格式的POI-OOXML。 以下是一个简单的示例,展示如何使用Apache POI创建Word文档并添加多级目录: ```java import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocumentProperties; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPackageProperties; public void createMultiLevelDirectory(XWPFDocument document) { // 创建大纲级别 XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); CTBody body = document.getDocument().getBody(); // 添加一级标题 XWPFAbstractNum num1 = document.addAbstractNum("Heading 1"); XWPFNumbering numbering1 = document.createNumbering(); numbering1.setAbstractNumId(num1.getId()); paragraph.getCTP().setPPr(numbering1.getPPr()); // 添加二级标题 XWPFAbstractNum num2 = document.addAbstractNum("Heading 2"); XWPFPicture picture = document.insertImage("path_to_image.jpg", CTImageObject.PICTURE_TYPE_JPEG); paragraph = document.createParagraph(); paragraph.addNewNumbering(); paragraph.getCTP().addNewPPr(); paragraph.getCTP().getPPr().setPStyle(num2.getPStyle()); // 示例数据插入文本 paragraph.setText("一级标题 - 第一层"); paragraph.addRun(picture); // 添加目录 CTDocumentProperties properties = document.getProperties(); CTPackageProperties packageProperties = properties.getPackageProperties(); CTCoreProperties coreProps = packageProperties.getCoreProperties(); coreProps.setDocTitle("我的文档标题"); List<XWPFHeaderFooter> headersFooters = document.getHeadersFooters(); for (XWPFHeaderFooter headerFooter : headersFooters) { if (headerFooter.getHeaderOrFooterType() == HeaderFooterType.HEADER_PRIMARY) { addTOCEntry(headerFooter, "一级标题", 0); break; } } private void addTOCEntry(XWPFHeaderFooter headerFooter, String title, int level) { XWPFTable ofContents = headerFooter.createTOC(); XWPFTableRow row = ofContents.addRow(); row.getCell(0).addText(title); CTTOCPart tocPart = ofContents.getCTTBodies().get(0).addNewTOC(); tocPart.setStartAt(level); tocPart.set_lvl(level); tocPart.setRef(title); } } // 调用方法 try { XWPFDocument document = new XWPFDocument(); createMultiLevelDirectory(document); // ...保存到文件 } catch (Exception e) { e.printStackTrace(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值