2016-05-08 5 views
0

Этот код добавляет номер 100 после каждого символа.Простое шифрование/дешифрование Java - имя входного_файла не существует

import java.io.*; 
import java.io.IOException; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 

public class FileEncryptionAndDecryption { 
    public static void main(String[] args) 
    throws IOException { 
     String inputFileName = "DemoFile"; 
     String encryptedFile = "Encrypted File"; 
     String decryptedFile = "Decrypted File"; 
     encryptFile(inputFileName, encryptedFile); 
     FileDecryption.decryptFile(encryptedFile, decryptedFile); 
    } 
    public static void encryptFile(String inputFileName, 
     String encryptedFile) 
    throws IOException, FileNotFoundException { 
     File file1 = new File(inputFileName); 

     FileInputStream fis = new FileInputStream(file1); 
     FileOutputStream fos = new FileOutputStream(encryptedFile); 
     int[] encrypt = { 
      100 
     }; 

     DataOutputStream outputFile = 
      new DataOutputStream(new FileOutputStream("Encrypt.dat")); 

     for (int i = 0; i < encrypt.length; i++) 
      fos.write(encrypt[i] + 100); 

     System.out.println("Encryption done."); 

     outputFile.close(); 
    } 
} 

class FileDecryption { 
    public static void decryptFile(String inputFileName, 
     String encryptedFile) 
    throws IOException, FileNotFoundException { 
     File file1 = new File(inputFileName); 

     FileInputStream fis = new FileInputStream(file1); 
     FileOutputStream fos = new FileOutputStream(encryptedFile); 
     int[] decrypt = { 
      0 
     }; 

     DataInputStream inputFile = 
      new DataInputStream(new FileInputStream("Encrypt.dat")); 

     for (int i = 0; i < decrypt.length; i--) 
      fos.write(decrypt[i] - 100); 

     System.out.println("Decryption done."); 

     inputFile.close(); 


} 
} 

Что мне нужно сделать для «демонстрационного файла»? Что было бы хорошим, простым тестовым кодом? И где я должен писать комментарии? Я не хочу кучу ненужных комментариев, хотя я не знаю, какие комментарии были бы необходимы.

+0

«добавляет номер 100»? так что «abc» --- >> «a100b100c100»? Я полагаю, что один комментарий будет означать, что он работает только для целых чисел, а не для символов. –

+1

Использование действительно описательных имен переменных и функций вместе с короткими функциями (5-7 строк) в значительной степени заменяет комментарии. Ваше именование выглядит неплохо. Проблема с комментариями заключается в том, что, как только код изменяется, они, как правило, больше не имеют смысла и правильны. – zaph

+0

Это должно быть на просмотре кода. Этот сайт посвящен очистке кода, который работает (комментирование). Этот сайт посвящен решению вопросов программирования. – nhouser9

ответ

0

Чтобы создать DemoFile, просто используйте текстовый редактор и поместите текст, который вы хотите зашифровать: я поместил DemoFile.txt в подпапку с именем ./data/.

./data/DemoFile.txt

abc 

Тогда просто положить в пути/имяфайла.рсш в код:

String inputFileName = "./data/DemoFile.txt"; 

Кроме того, следующие виды использования в то время как петли для объектов FileInputStream и читает файлы, символы по символу для шифрования и дешифрования, которые, как я думаю, являются тем, что вы намеревались.

 public static void main (String[] args) throws IOException { 
      String inputFileName = "./data/DemoFile.txt"; 
      String encryptedFile = "./data/Encrypted.txt"; 
      String decryptedFile = "./data/Decrypted.txt"; 
      encryptFile     (inputFileName, encryptedFile); 
      FileDecryption.decryptFile (encryptedFile, decryptedFile); 
     } 

     public static void encryptFile (String inputFileName, String encryptedFile) 
      throws IOException, 
      FileNotFoundException { 
      File file1 = new File (inputFileName); 

      FileInputStream  fis = new FileInputStream (file1); 
      FileOutputStream fos = new FileOutputStream (encryptedFile); 
      int[] encrypt = { 100 }; 

      DataOutputStream outputFile = new DataOutputStream (new FileOutputStream (encryptedFile)); 

      //for (int i = 0; i < encrypt.length; i++) { 
      int r; 
      while ((r = fis.read()) != -1) { 
       char ch = (char) r; 
       System.out.println ("Reading ["+ ch + "]"); 
       fos.write (ch+encrypt[0]); 
       System.out.println ("Encrypted ["+ ch+encrypt[0] + "]"); 
      } 

      System.out.println("Encryption done."); 

      outputFile.close(); 
     } 
    } 

    class FileDecryption { 
     public static void decryptFile (String inputFileName, String encryptedFile) 
      throws IOException, 
      FileNotFoundException { 
      File file1 = new File(inputFileName); 

      FileInputStream fis = new FileInputStream(file1); 
      FileOutputStream fos = new FileOutputStream(encryptedFile); 
      int[] decrypt = { 100 }; 

      DataInputStream inputFile = new DataInputStream(new FileInputStream(encryptedFile)); 

      //for (int i = 0; i < decrypt.length; i--) 
      // fos.write(decrypt[i] - 100); 

      int r; 
      while ((r = fis.read()) != -1) { 
       char ch = (char) (r-decrypt[0]); 
       System.out.println ("Reading ["+ ch + "]"); 
       fos.write (ch); 
       System.out.println ("Decrypted ["+ (ch) + "]"); 
      } 

      System.out.println("Decryption done."); 
      inputFile.close(); 

     } 
    } 

Надеюсь, это ответит на ваши вопросы. Код должен помочь вам в достижении цели ... adym