2016-04-22 3 views
-1

Пожалуйста, помогите найти ошибку. У меня есть файл класса. Я беру байтовый код этого класса и шифрую его с помощью шифрования Цезаря. У меня есть несколько аргументов командной строки:Encript and load file

  1. файл класса: который мы зашифровать,
  2. файла класс: в котором выходной сигнал будет передавать
  3. ключа: номер, который мы добавим к каждому числу байт коды первый аргумент.

Я хочу просто зашифровать первый аргумент нулевым ключом, вывод передаст второй аргумент, а затем я хочу запустить второй файл (второй аргумент).

компилировать:

javac Caesar.java 

Пробег:

java Caesar HelloWorld.class Hello1.class 0 

(внимание - я использую нулевой ключ, поэтому файл не должен быть изменен)

И запустить второй файл, И я вижу такую ​​ошибку:

[email protected] ~/zagruzchik $ java Hello1 Exception in thread "main" java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.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(); 
    } 
} 
+0

Ваш код в настоящее время некорректен относительно использования вашего кронштейна. Я пытался отформатировать его, но эта строка вызывала проблему, и я не был уверен, где вы '{' должен был идти: 'try (// класс, который будет зашифрован) – Draken

ответ

0

Помимо того, что вы хотите зашифровать файл, существует более фундаментальная проблема.

I want simply to encrypt the first argument with a zero key, output will transmit to second argument, and then I want to run a second file (second argument).

, которая проявляется в этом исключением

$ java Hello1 
Exception in thread "main" 
java.lang.NoClassDefFoundError: Hello1 (wrong name: HelloWorld) 

class имя должно быть равно имя *.class файла. Если ваше имя класса равно HelloWorld, его можно использовать, только если оно хранится в файле класса с именем HelloWorld.class.

Если переименовать файл в Hello1.class он не будет работать, как вы инструктировать виртуальную машину Java для выполнения класса Hello1, но этот класс не хранится файл Hello1.class.