【问题标题】:Swap Characters Using Command Prompt使用命令提示符交换字符
【发布时间】:2017-12-04 08:10:39
【问题描述】:

尝试使用允许交换任意两个字符的命令行参数编写一个名为SwapChars.java 的程序。例如,如果程序被称为SwapChars,那么要交换文件test.txt中的所有‘a’和‘b’,我们将输入

java SwapChars test.txt ab

我输入了以下代码,它一直给我一个异常错误,我不确定我哪里出错了......

import java.util.*;
import java.io.*;
public class SwapChars {

    public static void main(String[] args) throws IOException {
        String a = args[0]; //file name (test.txt entered into command line)
        FileReader fr = new FileReader(a);
        String b = args[1];//which characters to swap
        int t = fr.read();
        while(t!=-1)
        {
            if(t==b.charAt(0))
            {
                System.out.println(b.charAt(1));
            }
            else if(t==b.charAt(1))
            {
                System.out.println(b.charAt(0));
            }
            else
            {
                System.out.println((char)t);
            }
                    t=fr.read();
        }
        // TODO Auto-generated method stub

    }

}

异常错误如下:

Exception in thread "main" java.io.FileNotFoundException: test.txt (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at SwapChars.main(SwapChars.java:7)

当我更改代码以消除对以下命令的需求时,我可以获得所需的输出:

import java.util.*;
import java.io.*;
public class SwapCharsTest {

public static void main(String[] args) throws IOException{
    FileReader fr = new FileReader("test.txt");
    String swap = "ab";
    int t = fr.read();
    while(t!=-1)
    {
        if(t==swap.charAt(0))
        {
            System.out.print(swap.charAt(1));
        }
        else if(t==swap.charAt(1))
        {
            System.out.print(swap.charAt(0));
        }
        else
        {
            System.out.print((char)t);
        }
        t=fr.read();
    }
    // TODO Auto-generated method stub

}

}

【问题讨论】:

  • 你遇到了什么错误?
  • "...一直给我一个例外..." - 您是否有理由从您的问题中省略了例外?请edit您的帖子并添加完整的堆栈跟踪,包括所有 Caused By 部分(如果有),并识别代码中引发异常的语句。
  • 不要使用大引号格式化堆栈跟踪 -- 使用代码格式化
  • 你认为java.io.FileNotFoundException是什么意思?
  • 抱歉,“更改此程序使其不接收命令” 没有意义。 @Stefan 的回答是正确的,并且还指出了您代码中的另外两个问题。

标签: java file command-line


【解决方案1】:

异常是因为找不到文件。尝试使用完整路径引用文件。

此外,当找到该文件时,您的程序将永远循环。并且可以轻松改进打印输出。进行以下两项更改:

        else
        {
            System.out.println((char) t);                      
        }
        t = fr.read();
    }

t = fr.read(); 为每个循环读取一个新字符,(char) 转换整数以便在屏幕上看起来更好)

如果您不想使用完整路径,则需要确定 Java 将在何处查找文件。这将(很可能)向您显示文件的放置位置:

System.out.println(new File("dummy").getAbsolutePath());

【讨论】:

  • 确定 test.txt 是有效的。但是您必须知道将 test.txt 文件放在哪里。显然它当前位于错误的文件夹中。我已经更新了我的答案;希望这能帮助您弄清楚 test.txt 的放置位置。
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多