所以我现在正在学习AP Comp Sci A并且正在尝试学习Java,而在开发一个小程序以跟上我的老师时,我遇到了几个问题。
该计划旨在记录条目并将其记录在日记中。我最终希望以HTML格式存储它,然后能够将我的日志通过电子邮件发送给HTML表格中的教师,但是这个问题阻止了这一点。
基本上,我的捕获,我正在尝试创建然后输入起始HTML代码(然后是html表的必要标签),但即使文件不存在,catch也无法正常运行,可能是因为'抛出IOException'Exclipse让我补充。
我还尝试向程序添加命令,但在使用时没有任何反应。没有抛出异常,没有打印等等。
这是我的代码:
me/notifications
很抱歉,如果这有点愚蠢,我是Java的新手,并且发现我只是通过制作程序来学习。我很感激帮助。
注意:值得注意的是我已经注释掉了捕获因为它根本不起作用,但这就是我使用的代码。
答案 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}}
虽然使用这种方法,但您需要注意不要遇到竞争条件。
希望这会有所帮助,让我知道你是如何上场的!