【发布时间】:2019-10-15 10:03:34
【问题描述】:
标题说明了一切,但这里有更多细节。我已经通过 Eclipse 将我的 java 程序导出为可运行的 jar。在运行时,它会记录应保存在文本文件中的数据,此外,一些信息会打印到控制台,仅供参考。
当我通过双击启动 jar 时,它会在文件不存在时创建文件并正确完成其工作,但显然没有输出到控制台,因为没有。
为了获得我的控制台输出,我尝试使用以下命令通过 Windows 控制台启动 jar:java -jar c:\path-to-the-jar\myJar.jar。它可以工作并将我的输出打印到控制台,但现在它不会创建文件也不会写入现有文件。我试图以管理员身份启动控制台,但这不是解决方案。我也试过这个命令:javaw -jar c:\path-to-the-jar\myJar.jar 但它不会输出到控制台但它会写入文件......
我必须使用特殊的启动条件或其他命令吗?我真的不知道在哪里搜索以及在谷歌上搜索什么。
提前致谢! -菲尔
这是我处理输出和文件写入的代码
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.nio.charset.StandardCharsets;
class DataLog {
private Path path;
private LocalDate actualDate;
private long errorCount = 0;
DataLog() {
try
{
path = Paths.get("LSV_DataLog_" + LocalDate.now() + ".txt"); //e.g. LSV_DataLog_2019-10-17.txt when its october 17th 2019
actualDate = LocalDate.now();
String str = "***" + LocalDateTime.now().toLocalDate().toString() + " - " + LocalDateTime.now().toLocalTime() + "***";
System.out.println(str);
Files.write(path, (str + System.lineSeparator()).getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
errorCount++;
} catch (Throwable t) {
t.printStackTrace();
errorCount++;
}
}
void addData(long val) {
try
{
if(!actualDate.equals(LocalDate.now())) {
actualDate = LocalDate.now();
path = Paths.get("LSV_DataLog_" + LocalDate.now() + ".txt"); //e.g. LSV_DataLog_2019-10-17.txt when its october 17th 2019
}
String str = LocalDate.now() + ", " + LocalDateTime.now().toLocalTime() + " Value: " + val;
System.out.println(str);
Files.write(path, (str + System.lineSeparator()).getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
errorCount++;
} catch (Throwable t) {
t.printStackTrace();
errorCount++;
}
}
void addInfo(String info) {
try
{
if(!actualDate.equals(LocalDate.now())) {
actualDate = LocalDate.now();
path = Paths.get("LSV_DataLog_" + LocalDate.now() + ".txt"); //e.g. LSV_DataLog_2019-10-17.txt when its october 17th 2019
}
String str = LocalDate.now() + ", " + LocalDateTime.now().toLocalTime() + ", " + info;
System.out.println(str);
Files.write(path, (str + System.lineSeparator()).getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
errorCount++;
} catch (Throwable t) {
t.printStackTrace();
errorCount++;
}
}
}
【问题讨论】:
-
显示一些代码是如何写入文件的
-
"标题说明了一切,但这里有更多细节。" - 很高兴您添加了更多细节,因为标题几乎没有说;)。无论如何,我们仍然需要更多信息,例如应用程序如何写入文件,例如无论您是将输出重新路由到文件的标准输出还是您正在使用的文件路径(该文件实际上可能存在,只是不在您期望的位置)。
-
在不了解文件写入方式的内部情况下无法提供进一步的帮助。也许您正在创建相对于当前目录的文件?可以切换到非系统目录运行
javaw命令吗? -
感谢大家!我在帖子中添加了代码!
-
@adarshr 添加了我的代码。是的,该文件是在 .jar 文件的目录中创建的。
标签: java windows file-io console