【问题标题】:java program does not write to file when started via windows consolejava程序通过Windows控制台启动时不写入文件
【发布时间】: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


【解决方案1】:

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

Java console program

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多