无法在另一个.java中运行公共类

时间:2013-11-06 21:38:43

标签: java

我创建了一个基本程序,它将输入的内容输入到两个文本字段中并将它们导出到文件中。我现在想要加密该文件,并且alredy有加密器。问题是我不能称之为。这是我的加密器代码:

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

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;

public class FileEncryptor {

private String algo;
private File file;

public FileEncryptor(String algo,String path) {
this.algo=algo; //setting algo
this.file=new File(path); //settong file
}

 public void encrypt() throws Exception{
    //opening streams
     FileInputStream fis =new FileInputStream(file);
     file=new File(file.getAbsolutePath());
     FileOutputStream fos =new FileOutputStream(file);
     //generating key
     byte k[] = "HignDlPs".getBytes();   
     SecretKeySpec key = new SecretKeySpec(k,algo.split("/")[0]);  
     //creating and initialising cipher and cipher streams
     Cipher encrypt =  Cipher.getInstance(algo);  
     encrypt.init(Cipher.ENCRYPT_MODE, key);  
     CipherOutputStream cout=new CipherOutputStream(fos, encrypt);

     byte[] buf = new byte[1024];
     int read;
     while((read=fis.read(buf))!=-1)  //reading data
         cout.write(buf,0,read);  //writing encrypted data
     //closing streams
     fis.close();
     cout.flush();
     cout.close();
 }

 public static void main (String[] args)throws Exception {
     new FileEncryptor("DES/ECB/PKCS5Padding","C:\\Users\\*******\\Desktop\\newtext").encrypt();//encrypts the current file.
  }
}

以下是我的文件创建者无法调用此部分的部分:

FileWriter fWriter = null;
BufferedWriter writer = null;
try{
fWriter = new FileWriter("C:\\Users\\*******\\Desktop\\newtext");
writer = new BufferedWriter(fWriter);
writer.write(Data);
writer.close();
f.dispose();
FileEncryptor encr = new FileEncryptor(); //problem lies here.
encr.encrypt //public void that does the encryption.
new complete(); //different .java that is working fine.

好的,我想我已经怀疑了。感谢所有贡献者。

5 个答案:

答案 0 :(得分:2)

在文件创建者中使用new运算符时,未向构造函数传递任何内容:

FileEncryptor encr = new FileEncryptor(); //problem lies here.

但是,您在main中的FileEncryptor中对其进行了测试:

new FileEncryptor("DES/ECB/PKCS5Padding","C:\\Users\\*******\\Desktop\\newtext").encrypt();//encrypts the current file.

传递适当的参数。

答案 1 :(得分:1)

当您尝试创建新的FileEncryptor对象时,必须使用在FileEncryptor.java文件中实现的构造函数之一。像这样:

String anAlgo = "something";
String aPath = "something"'
FileEncryptor encr = new FileEncryptor(anAlgo, aPath);

希望这有帮助。

答案 2 :(得分:0)

这个类中只有一个带有2个参数的构造函数。这意味着对象创建机制需要2个参数。如果你需要创建一个没有这些参数的对象,除了像public FileEncryptor(){//Default Constructor}之类的2参数构造函数之外,你还可以提供一个无参数构造函数,但是由于algo和path需要执行加密,所以它没有任何意义。 / p>

答案 3 :(得分:0)

你的public FileEncryptor(String algo,String path)有两个参数的构造函数。编译器自动为没有构造函数的任何类提供无参数的默认构造函数。但是只要声明一个,就不能使用new FileEncryptor();调用空构造函数,除非在类上下文中指定它:

public class FileEncryptor {

   private String algo;
   private File file;

   public FileEncryptor(String algo,String path) {
      this.algo=algo; //setting algo
      this.file=new File(path); //settong file
   }

   public FileEncryptor()
   {
        // your code here
   }

答案 4 :(得分:0)

您缺少FileEncryptor类的构造函数的参数。

这是你的构造函数。

public FileEncryptor(String algo,String path) {
    this.algo=algo; //setting algo
    this.file=new File(path); //settong file
}

但是你正在创建一个像这样的对象。

FileEncryptor encr = new FileEncryptor(); //problem lies here.

您需要将要使用的加密算法名称和要加密的文件的路径传递给它。

Cipher类获取您要用于加密的算法实例。

Cipher encrypt =  Cipher.getInstance(algo);

浏览Cipher类的文档以查看支持的类型。链接在这里。 http://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html#getInstance%28java.lang.String%29