尝试使用命令行参数编写一个名为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
}
}
答案 0 :(得分:1)
异常是因为无法找到该文件。尝试使用完整路径引用该文件。
此外,找到文件后,您的程序将永远循环。打印输出很容易改进。进行以下两项更改:
else
{
System.out.println((char) t);
}
t = fr.read();
}
(t = fr.read();
为每个循环读取一个新的char,(char)
转换整数,使其在屏幕上看起来更好)
如果您不想使用完整路径,则需要确定Java将在何处查找该文件。这将(很可能)显示放置文件的位置:
System.out.println(new File("dummy").getAbsolutePath());