我想用一些新数据替换文件中的数据,并用Java中的其他名称重命名该文件。我将旧文件保存在与执行更改的代码相同的类目录中。我在命令提示符下使用的命令如下。

java ReplacingText oldfile newfile oldstring newstring


我得到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: ReplacingText (wrong name: replacingtext/ReplacingText)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)


有人可以给它一些启示。

package replacingtext;

import java.io.*;
import java.util.*;

public class ReplacingText
{
    public static void main(String[] args) throws Exception
    {

        if (args.length !=4)
        {
            System.out.println(
            "Usage: java ReplaceText sourceFile targetFile oldStr newStr");
            System.exit(0);
        }
        File sourceFile = new File(args[0]);
        if(!sourceFile.exists())
        {
            System.out.println("Source file " + args[0]+" does not exist");
            System.exit(0);
        }
        File targetFile = new File(args[1]);
        if (targetFile.exists())
        {
            System.out.println("Target File " + args[1] + "already exist");
            System.exit(0);
        }
        Scanner input = new Scanner(sourceFile);
        PrintWriter output2 = new PrintWriter(targetFile);

        while (input.hasNext())
        {
            String s1=input.nextLine();
            String s2=s1.replaceAll(args[2],args[3]);
            output2.println(s2);
        }
        input.close();
        output2.close();
    }
}

最佳答案

我在网上找到了它。
首先,我做一个direcoty,名称为“ replacingtext”,包装名称。
然后,我将已编译的类“ ReplacingText.class”移入其中。
最后,我在“ replacingtext”父目录中运行“ java replacetext.ReplacingText” c:/s.txt”“ c:/t.txt” haha​​ yes”。

宾果游戏.....

但是..我不知道为什么..
也许classLoader通过相对路径找到类,而不仅仅是类名...

09-10 16:39