2017-07-16 8 views
2

私の新しいプロジェクトでは、文書をGUIで選択してエンコードしようとしています。私のプログラムには、ファイルを選択する部分と、それをエンコードする部分の2つの部分があります。だから、ファイルを選択した後、暗号化メソッドを呼び出す必要がありますが、実際には動作しません。パスが取られていないように見えるからです。JavaでFileChooserで選択した後にファイルを暗号化

public class frame1 { 

    String filepath; 

    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     JDialog.setDefaultLookAndFeelDecorated(true); 
     JFrame frame = new JFrame("Test"); 
     frame.getContentPane().setLayout(new FlowLayout()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton button = new JButton("Encrypt"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
      JFileChooser fileChooser = new JFileChooser(); 
      FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES","txt", "text"); 
      fileChooser.setFileFilter(filter); 
      int returnValue = fileChooser.showOpenDialog(null); 
      if (returnValue == JFileChooser.APPROVE_OPTION) { 
       File selectedFile = fileChooser.getSelectedFile(); 
        System.out.println(selectedFile.getAbsolutePath()); 
        String filepath = selectedFile.getAbsolutePath(); 

      } 
     frame.getContentPane().add(button); 
     frame.pack(); 
     frame.setVisible(true); 

     public void encrypt() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException { 
     KeyGenerator keygenerator = KeyGenerator.getInstance("AES"); 
     SecretKey myDesKey = keygenerator.generateKey(); 
     Cipher desalgCipher; 
     desalgCipher = Cipher.getInstance("AES"); 
     desalgCipher.init(Cipher.ENCRYPT_MODE, myDesKey); 

     Path path = Paths.get(filepath); 
     try(InputStream is = Files.newInputStream(path);  
     CipherInputStream cipherIS = new CipherInputStream(is, desalgCipher); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(cipherIS));){ 
      String line; 
      while((line = reader.readLine()) != null){ 
       System.out.println(line);    
      } 
     } 
     }   
} 
+0

しかし、絶対パスではありません。ユーザーはファイルを選択しますか、それとも何を意味しますか? –

+0

あなたのプログラムには多くの問題があります。フレームにボタンをどこに追加しますか?フレームをどこに見えるように設定しますか?クラス 'frame1'のフィールドとして' filepath'を持っていますが、そのクラスのオブジェクトをインスタンス化することはありません。 – ck1

+0

@ ck1私の悪い、私はそれを修正しました。しかし、私はメインメソッドの中でメソッドを実行するか、そこに貼り付けます。 –

答えて

2

あなたがプログラムに作ることができる簡単な変更は、encrypt()方法にチューから返されたファイルを渡すことです。例:

import javax.crypto.*; 
import javax.swing.*; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.*; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.security.InvalidKeyException; 
import java.security.NoSuchAlgorithmException; 

public class App { 
    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     JDialog.setDefaultLookAndFeelDecorated(true); 

     JFrame frame = new JFrame("Test"); 
     frame.getContentPane().setLayout(new FlowLayout()); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     JButton button = new JButton("Encrypt"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       JFileChooser fileChooser = new JFileChooser(); 
       FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES", "txt", "text"); 
       fileChooser.setFileFilter(filter); 
       int returnValue = fileChooser.showOpenDialog(null); 
       if (returnValue == JFileChooser.APPROVE_OPTION) { 
        File selectedFile = fileChooser.getSelectedFile(); 
        System.out.println(selectedFile.getAbsolutePath()); 
        String filepath = selectedFile.getAbsolutePath(); 
        try { 
         encrypt(filepath); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 

      public void encrypt(String path) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException { 
       KeyGenerator keygenerator = KeyGenerator.getInstance("AES"); 
       SecretKey myDesKey = keygenerator.generateKey(); 
       Cipher desalgCipher; 
       desalgCipher = Cipher.getInstance("AES"); 
       desalgCipher.init(Cipher.ENCRYPT_MODE, myDesKey); 

       try (InputStream is = Files.newInputStream(Paths.get(path)); 
        CipherInputStream cipherIS = new CipherInputStream(is, desalgCipher); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(cipherIS));) { 
        String line; 
        while ((line = reader.readLine()) != null) { 
         System.out.println(line); 
        } 
       } 
      } 
     }); 

     frame.getContentPane().add(button); 
     frame.setSize(300, 400); 
     frame.setVisible(true); 
    } 
} 
+0

私はコードを実行しようとしています助けになるが、何らかの理由でjavaframeが表示されない場合は、これを手伝ってもらえますか? –

関連する問題