java - Netbeans 无法识别 .tex 文件
问题描述
对于一个重要的项目,我正在尝试使用第三方库JLR来导出格式化的 PDF 报告。
直到两天前,这一直正常工作,当将鼠标悬停在我用作 NetBeans IDE 文件查看器中报告模板的 .tex 文件上时,会显示一个工具提示,将文件表示为“无法识别的文件”。它也将不再作为资源导入,因为当使用getResource
类的方法或其ClassLoader.getResource
方法时,生成的File
对象不存在。我的工作目录中的所有内容都位于适当的位置,并通过相对文件路径引用它。
- 这是什么意思?
- 我怎样才能让文件被识别?
- 我可以用这种文件类型防止这种情况再次发生吗?
编辑:我尝试更改 NetBeans 与文件关联的 MIME 类型,以查看 NetBeans 是否识别它,但这没有成功。
编辑:如果有人想看,这是相关代码。
public Boolean createAndFormatLaTex(String nameOfExercise, String author, String date, String desc, List<Rule> rulesToPrint) {
Boolean success = true;
gen = new JLRGenerator();
try {
ClassLoader cl = this.getClass().getClassLoader();
URL templateLoc = cl.getResource("resources/templateRep.tex");
File templateFile = new File(templateLoc.getFile());
//URL workDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
File workDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
//URL tempDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File tempDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File reptemp1 = new File(tempDir.getAbsolutePath() + File.separator + nameOfExercise+"-report.tex");
String s = templateFile.getAbsolutePath();
templateFile.setReadable(true);
conv = new JLRConverter(workDir);
conv.replace("date", date);
conv.replace("description", desc);
conv.replace("authorName", author);
conv.replace("nameOfExercise", nameOfExercise);
conv.replace("rulesToPrint", rulesToPrint);
if (!conv.parse(templateFile, reptemp1)) {
success = false;
}
File desktop = new File(System.getProperty("user.home") + File.separator + "Desktop");
if(!gen.generate(reptemp1, desktop ,workDir))
{
success = false;
}
reptemp1.deleteOnExit();
tempDir.deleteOnExit();
} catch (IOException iex) {
System.out.println(iex.getMessage());
return false;
//} catch (URISyntaxException ex) {
// Logger.getLogger(LaTexParser.class.getName()).log(Level.SEVERE, null, ex);
// return false;
}catch(NullPointerException nex){
Logger.getLogger(LaTexParser.class.getName()).log(Level.SEVERE, null, nex);
return false;
}
return success;
}
解决方案
好的,所以我从其他人那里汇总了解决方案,一个有效的方法是将资源读取为一个InputStream
而不是一个File
.
这看起来像这样:
ClassLoader cl = this.getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("resources/templateRep.tex");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//URL workDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
File workDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
//URL tempDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File tempDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File reptemp1 = new File(tempDir.getAbsolutePath() + File.separator + nameOfExercise+"-report.tex");
File tempStorageFile = new File(tempDir.getAbsolutePath() + File.separator + "tempStorage.tex");
OutputStream os = new FileOutputStream(tempStorageFile);
IOUtils.copyLarge(is, os);
os.close();
更换
ClassLoader cl = this.getClass().getClassLoader();
URL templateLoc = cl.getResource("resources/templateRep.tex");
File templateFile = new File(templateLoc.getFile());
//URL workDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
File workDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator);
//URL tempDirLoc = cl.getResource(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File tempDir = new File(System.getProperty("user.home")+File.separator+"MaMoOr"+File.separator+"resources"+File.separator+"temp"+File.separator);
File reptemp1 = new File(tempDir.getAbsolutePath() + File.separator + nameOfExercise+"-report.tex");
String s = templateFile.getAbsolutePath();
在我的原始代码中。
推荐阅读
- typo3 - 如何通过 TypoScript 获取 HMENU 项目的“级别标题”?
- python - 熊猫正则表达式理解 - 隔离单个结果
- security - 解密图像
- regex - 如何在纯 ERE 正则表达式中否定一个词
- algorithm - 一个算法问题:找出从一个城市移动到另一个城市所需的“步数”
- java - 如何禁用自动启动的 KAFKA 消费者,而无需进行任何代码更改,包括在 Spring Boot 中设置 autoStartup = "{xyz}"?
- oracle - 根据特定条件检索
- unity3d - 连续滚动 UI Unity
- javascript - Express/Postgres 用户注册控制器
- php - 在 WPML 中注册的 ACF 选择