【问题标题】:Handling file paths in cmd in java在java中处理cmd中的文件路径
【发布时间】:2018-11-30 20:46:11
【问题描述】:

我正在尝试使用我的 java 程序从一个文件夹中复制一个文件并通过命令行粘贴到另一个文件夹中,但我遇到了一堆不同的错误。我的代码是

public static void main(String[] args) throws IOException
{
    String src = args[0];
    String dest = args[1];
    String temp[] = src.split("\\");
    String fileName = temp[temp.length-1];
    String data;
    FileReader fr = null;
    BufferedReader br = null;
    FileWriter fw = null;
    PrintWriter pw = null;
    try
    {
        fr = new FileReader(src);
        br = new BufferedReader(fr);
        fw = new FileWriter(dest + "\\" + fileName);
        pw = new PrintWriter(fw);
        data = br.readLine();
        while(data != null)
        {
            pw.println(data);
            data = br.readLine();
        }
    }
    catch(IOException ex)
    {
        System.out.println(ex.getMessage());
    }
}

请告诉我我的代码做错了什么。提前致谢。

这些是我在 cmd 上遇到的错误 https://imgur.com/a/83JvVmP

【问题讨论】:

  • “我收到一堆错误” - 什么错误?请编辑您的问题以包含您遇到的错误。
  • 使用File API 来操作路径。或者,更好的是Path API。
  • 您的机器上是否运行多个 Java 版本?
  • 错误提示,您的 JDK 和 JRE 版本似乎不同。该代码是使用 JDK 编译的,但另一个版本的 JRE 正在尝试运行该代码。
  • 该错误与您的代码无关,而与您的编译有关。您使用 JDK11 编译器编译并尝试使用 JDK8(或 JRE8)运行时运行,但这是行不通的。如果您的机器上安装了多个版本的 Java(可能包括作为 IDE 的一部分安装的 Java,如果您使用的是 IDE,但您没有说)检查您的 PATH 以查看哪个将从 CMD 运行.

标签: java command-line-arguments


【解决方案1】:

您可以使用 Paths 代替获取路径:

public static void main(String[] args) {
    String src = args[0];
    String dest = args[1];

    String fileName = Paths.get(src).getFileName().toString();

    System.out.println("fileName:" + fileName);

    String data;
    FileReader fr = null;
    BufferedReader br = null;
    FileWriter fw = null;
    PrintWriter pw = null;
    try {
        fr = new FileReader(src);
        br = new BufferedReader(fr);
        fw = new FileWriter(dest + "\\" + fileName);
        pw = new PrintWriter(fw);
        data = br.readLine();
        while (data != null) {
            pw.println(data);
            data = br.readLine();
        }
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
}

我在 Eclipse 中尝试了这个,并使用了一个 Jar,并且工作正常:

【讨论】:

  • 这适用于文件名,但存储在字符串中的路径为“C:abc\xyz\aaa.txt”,而应为“C:abc\\xyz\\aaa.txt”让它工作。我很确定这是我遇到错误的原因。我还附上了错误图片,以帮助其他人理解我的问题。谢谢
  • @Jerry555555:实际路径应该有一个反斜杠,并且应该在驱动器后面有一个反斜杠(C:\whatever)。在字符串和字符文本在 Java 源代码中 中,反斜杠必须加倍,但在 Windows 的命令行和其他运行时输入和输出中则不是。如果您使用的是调试器,则 可能 会根据调试器的不同而加倍。 (Unix shell 在一些 地方需要双反斜杠,但在其他地方不需要,但这更复杂,而且你不会在 Unix 上使用 Windows 路径。)
  • @Jerry555555 您在 cmd 图片中没有任何反斜杠或任何内容。我通过测试编辑了我的答案。
猜你喜欢
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多