2017-07-16 28 views
2

对于我的新项目,我尝试在gui中选择文档后对其进行编码。我的程序包含两个部分,一个选择文件,另一个对其进行编码。所以在选择一个文件之后,应该调用加密方法,但它并不真正起作用,因为路径似乎没有被采用。使用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

您的程序存在许多问题。你在哪里添加按钮到框架?你在哪里设置框架可见?你有'filepath'作为类'frame1'中的一个字段,但你永远不会实例化该类的一个对象。 – 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不显示,你能帮助我吗? –

相关问题