Java 编写并加载文件

Java 编写并加载文件,java,load,bytecode,caesar-cipher,Java,Load,Bytecode,Caesar Cipher,请帮我找出一个错误。 我有一个班级档案。我取这个类的一个字节码,用凯撒密码加密。我有几个命令提示符参数: 类文件:我们对其进行加密 类文件:输出将在其中传输 键:我们添加到每个字节码中的数字 第一个论点 我只想用零密钥加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数) 我汇编: javac Caesar.java 运行: (注意-我使用零键,所以不应该更改文件) 然后运行第二个文件,我看到这样的错误: julia@julia-Aspire-5680~/zagruzch

请帮我找出一个错误。 我有一个班级档案。我取这个类的一个字节码,用凯撒密码加密。我有几个命令提示符参数:

  • 类文件:我们对其进行加密
  • 类文件:输出将在其中传输
  • 键:我们添加到每个字节码中的数字 第一个论点
  • 我只想用零密钥加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)

    我汇编:

    javac Caesar.java
    
    运行:

    (注意-我使用零键,所以不应该更改文件)

    然后运行第二个文件,我看到这样的错误:

    julia@julia-Aspire-5680~/zagruzchik$java Hello1中的异常 线程“main”java.lang.NoClassDefFoundError:Hello1(错误名称: HelloWorld),位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.defineClass(ClassLoader.java:800) security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 位于java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在java.net.URLClassLoader.access$100(URLClassLoader.java:71) java.net.URLClassLoader$1.run(URLClassLoader.java:361)位于 java.net.URLClassLoader$1.run(URLClassLoader.java:355)在 java.security.AccessController.doPrivileged(本机方法)位于 java.net.URLClassLoader.findClass(URLClassLoader.java:354)位于 loadClass(ClassLoader.java:425)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)位于 loadClass(ClassLoader.java:358)位于 launcher.LaunchHelper.checkAndLoadMain(LaunchHelper.java:482)

    我的源代码:

    import java.io.*;
    import static java.lang.System.out;
    
    /**
    encript by caesar chipher
    */
    public class Caesar {
        public static void main(String[]args) {
            if (args.length == 3)
            {
            }
            else {
                System.out.println("USAGE: java Caesar in out key");
                return;
            }
            try ( //class which will be ciphered
                FileInputStream in = new FileInputStream(args[0])) {
                    //in output will go encripted byte code of file
                    FileOutputStream out = new FileOutputStream(args[1]);
                    //this is key
                    int key = Integer.parseInt(args[2]);
                    int ch;
    
                    //in cycle encript byte code
                    while ((ch = in.read()) != -1) {
                        byte c = (byte)(ch + key);
                        out.write(c);
                    }
                }
            catch(IOException exception)
            {
            }
            out.close();
        }
    }
    

    除了要加密文件的方式之外,还有一个更基本的问题

    我只想用零密钥加密第一个参数,输出将传输到第二个参数,然后我想运行第二个文件(第二个参数)

    这体现在这个例外中

    $ java Hello1 
    Exception in thread "main"
    java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld) 
    
    class
    名称必须等于
    *.class
    文件名。如果您的类名为
    HelloWorld
    ,则仅当它存储在名为
    HelloWorld.class
    的类文件中时,才能使用它


    如果您将文件重命名为
    Hello1.class
    ,它将不起作用,因为您指示Java虚拟机执行class
    Hello1
    ,但未存储此类。文件
    Hello1.class

    您的代码当前在括号用法方面不正确。我试图格式化它,但这一行引起了一个问题,我不确定你的
    {
    应该去哪里:
    try(//将被加密的类
    $ java Hello1 
    Exception in thread "main"
    java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld)