0

ファイル内のデータを新しいデータに置き換え、ファイルの名前を 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();
    }
}
4

2 に答える 2

1

ネットで見つけました。最初に、「replaceingtext」という名前のパッケージ名を作成します。次に、コンパイル済みのクラス「ReplaceingText.class」をそこに移動します。最後に、「replaceingtext」親ディレクトリで「java replacementtext.ReplaceingText "c:/s.txt" "c:/t.txt" haha​​ yes」を実行します。

ビンゴ...それは動作します..

しかし..理由はわかりません..おそらくclassLoaderは、クラス名だけでなく、相対パスでクラスを見つけます...

于 2013-11-13T06:26:23.753 に答える
0

まず、このような方法をテストしました。

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

        String sourceFile = "c://s.txt";
        String targetFile = "c://t.txt";
        String oldS = "haha";
        String newS = "yes";
        test(new String[]{sourceFile,targetFile,oldS,newS});

        //      test(args);
    }

    private static void test(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        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();
    }

できます。

次に、このように上記の方法に基づいてテストしました。

public static void main(String[] args) throws Exception {
        test(args);
}

java ReplacingText c://s.txt c://t.txt ハハ はい

それもうまくいきました..

ps:JAVA_HOME を設定していないので、jdk/bin ディレクトリで実行します。

于 2013-11-13T02:29:04.947 に答える