通过 Windows 控制台启动时,java 程序不会写入文件

标签 java windows file-io console

标题说明了一切,但这里还有一些更多细节。我已经通过 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++;
        }
    }
}

最佳答案

重定向到关于 eclips 中的 java consol 应用程序的这组答案会很有用,这并不是说您的问题是重复的,而是您可以在两个问题之间有一个共同的概念

Java console program

关于通过 Windows 控制台启动时,java 程序不会写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392093/

相关文章:

windows - 如何在 Windows 中检测何时连接了新硬件?

windows - .bat 文件比较两个文本文件并输出差异

c++ - for 循环、读取和写入文件有困难

java - 刷新 JSP 中的文件

javascript - 使用javascript将数据写入本地文本文件

java - 关闭 Eclipse RCP 4 中的部件时的自定义消息

java - 如何在Java中将 ""(空格)存储在 `int`数组中

java - 在java运行时抢占一个线程为另一个线程

java - TimeSeriesChart 的最大范围值是多少

windows - 在 MSDN 中,TBD 代表什么?