try / catch失败错误+控制台命令接受输入但未运行

时间:2017-10-23 20:56:53

标签: java html exception-handling

所以我现在正在学习AP Comp Sci A并且正在尝试学习Java,而在开发一个小程序以跟上我的老师时,我遇到了几个问题。

该计划旨在记录条目并将其记录在日记中。我最终希望以HTML格式存储它,然后能够将我的日志通过电子邮件发送给HTML表格中的教师,但是这个问题阻止了这一点。

基本上,我的捕获,我正在尝试创建然后输入起始HTML代码(然后是html表的必要标签),但即使文件不存在,catch也无法正常运行,可能是因为'抛出IOException'Exclipse让我补充。

我还尝试向程序添加命令,但在使用时没有任何反应。没有抛出异常,没有打印等等。

这是我的代码:

me/notifications

很抱歉,如果这有点愚蠢,我是Java的新手,并且发现我只是通过制作程序来学习。我很感激帮助。

注意:值得注意的是我已经注释掉了捕获因为它根本不起作用,但这就是我使用的代码。

2 个答案:

答案 0 :(得分:0)

第一个字符串比较采用方法equals

initialCmd == "!help"
initialCmd.equals("!help") // Or equalsIgnoreCase

然后

        try (PrintWriter saveLog = new PrintWriter(new FileWriter("log.html", true))) {
            saveLog.println(timeStamp+":"+"<b>"+journalEntry+"</b>"+"<br>");

        }

没关系,因为它以追加模式(true)写入文件,几乎不会抛出FileNotFoundException(=无法创建文件)。

您可以这样做:

    try (...
        ...
    } catch (IOException e) {
        e.printStackTrace();
    }

由于FileNotFoundException也是IOException。对于磁盘空间不足,缺少权限,错误的目录路径。

一句话:FileWriter将使用默认(= platform)编码。对于 String能够使用的完整Unicode范围,您可以使用UTF-8:

      try (PrintWriter saveLog = new PrintWriter(
              Files.newBufferedWriter(Paths.get("log.html"),
                  StandardCharsets.UTF_8,
                  StandardOpenOption.APPEND,
                  StandardOpenOption.CREATE))) {
          saveLog.printf("%s:<b>%s</b><br>%n", timeStamp, journalEntry);
      }

也不是导致异常的原因可能是两个线程记录到文件。

java.util.logging 框架中投入时间并不错,可以自定义大致相同的功能,等等。

如果写入相同的内容,上面的内容不会对不存在的文件产生问题。

对于HTML,我想写一个开头。可以通过将日志文件包含在真实的HTML文件中来实现:

<!DOCTYPE html [
    <ENTITY log SYSTEM "log.html">
]>
<html>
  <head>
    <title>Logs</title>
    <meta charset="UTF-8">
    <meta http-equiv="refresh" content="5"> <!-- reload every 5s -->
  </head>
  <body>
&log;
  </body>
</html>

答案 1 :(得分:0)

@ index.php为了澄清,传递true作为logs.html的第二个参数(如@JoopEggen建议的那样)会导致创建文件(如果它不存在)并且如果它不存在则打开以进行追加确实存在。因此,当您创建新文件java.io.File并在创建后附加到该文件时,您不会遇到问题。不管你还在尝试做什么吗?因此,如果捕获仅用于创建不存在的文件,则不再需要它?

另一方面,如果您尝试记录文件从未存在的事实,您可以使用File f = new File(filePathString); //Note we do !f.isDirectory() as exists will return true for directories too if(f.exists() && !f.isDirectory()) { // log that file didn't exist // create file and append custom error } 并执行以下操作:

{{1}}

虽然使用这种方法,但您需要注意不要遇到竞争条件。

希望这会有所帮助,让我知道你是如何上场的!