首页 > 解决方案 > Netbeans 无法识别 .tex 文件

问题描述

对于一个重要的项目,我正在尝试使用第三方库JLR来导出格式化的 PDF 报告。

直到两天前,这一直正常工作,当将鼠标悬停在我用作 NetBeans IDE 文件查看器中报告模板的 .tex 文件上时,会显示一个工具提示,将文件表示为“无法识别的文件”。它也将不再作为资源导入,因为当使用getResource类的方法或其ClassLoader.getResource方法时,生成的File对象不存在。我的工作目录中的所有内容都位于适当的位置,并通过相对文件路径引用它。

  1. 这是什么意思?
  2. 我怎样才能让文件被识别?
  3. 我可以用这种文件类型防止这种情况再次发生吗?

编辑:我尝试更改 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;
}

标签: javanetbeanslatextypesetting

解决方案


好的,所以我从其他人那里汇总了解决方案,一个有效的方法是将资源读取为一个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();

在我的原始代码中。


推荐阅读