当前位置: 首页 > 知识库问答 >
问题:

如何从另一个类访问变量

濮丰
2023-03-14

我是java新手,我不知道如何从另一个类访问变量

我正在尝试编写一个代码来发送带有未存储在本地的附件的邮件。我想访问SendMail类中ExcelFile类中编写的变量

public class ExcelFile {
   public static void generateExcelFile(String fileName,Map<int, String> studentRecord){
         XSSFWorkBook workbook = new XSSFWorkbook();
         XSSFSheet sheet= workbook.createSheet();
         writeHeaderLines(sheet);//method that writes the header lines for the excel file
         writeDataLines(studentRecord,sheet);//method that writes the data into the excel file
         ByteArrayOutputStream bos=new ByteArrayOutputStream();
         try{
             workbook.write(bos);}
         finally{
             bos.close();
         }
         byte[]excelFileAsByte = bos.toByteArray();// trying to refer this in SendMail Class
         workbook.close();
}}

public class SendMail{
public void sendMailWithAttachment(String excelFileName){
try{
        String recipient = "recipient@gmail.com";
     
        String sender = "sender@gmail.com";

        String host = "127.0.0.1";

        Properties properties = System.getProperties();

        properties.setProperty("mail.smtp.host", host);
    
        Session session = Session.getDefaultInstance(properties);
     
            MimeMessage message = new MimeMessage(session);
     
            message.setFrom(new InternetAddress(sender));
     
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
     
            message.setSubject("This is Subject");
             
            BodyPart messageBodyPart1 = new MimeBodyPart();
            messageBodyPart1.setText("This is body of the mail");
             
            BodyPart messageBodyPart2 = new MimeBodyPart();
            //DataSource source = new FileDataSource(filename); 
            //messageBodyPart2.setDataHandler(new DataHandler(source)); 
            ByteArrayResource resource = new ByteArrayResource(excelFileAsByte);
            messageBodyPart2.setFileName(excelFileName);
 
             
            Multipart multipartObject = new MimeMultipart(); 
            multipartObject.addBodyPart(messageBodyPart1); 
            multipartObject.addBodyPart(messageBodyPart2);
     
            message.setContent(multipartObject);
     
            Transport.send(message);
            System.out.println("Mail successfully sent");
        }
        catch (MessagingException mex)
        {
            mex.printStackTrace();
        }
    }}

如何在另一个类中访问excelFileAsByte并发送邮件而不将其存储在本地。我可以使用addBodyPart和ByteArrayResource将文件添加为附件吗。

共有1个答案

宋腾
2023-03-14

你需要一块地。这在Java中很常见。将以下内容添加到类ExcelFile。这被称为属性设置器和获取器。

public class ExcelFile {
    private byte[] excelFileAsByte;

    public byte[] getExcelFileAsByte() {
        return excelFileAsByte;
    }

    public void setExcelFileAsByte(byte[] excelFileAsByte) {
        this.excelFileAsByte = excelFileAsByte;
    }

    ...

}

此外:

  • 从GenerateExcelFile中删除静态
  • byte[]excelFileAsByte=bos.toByteArray()更改为excelFileAsByte=bos.toByteArray()

在另一个类中,使用

ExcelFile excelFile = new ExcelFile();
excelFile.generateExcelFile(...
byte[] myExcelFile = excelFile.getExcelFileAsByte();

这不是一个完整的示例,但我希望它能帮助您开始。

 类似资料:
  • 问题内容: 我正在编写一个利用多个类的程序。我有一个专门用于确定一组变量的值的类。然后,我希望能够与其他类一起访问那些变量的值。我的代码如下所示: 我使用classA初始化2个变量(var1和var2)。然后,我使用methodA添加它们,将结果保存为var1(我认为这会使var1 = 3和var2 = 2)。我想知道的是,我将如何拥有ClassB,然后能够从ClassA获得var1和var2的值

  • 问题内容: 我试图尽可能简化我的困境。我有三节课: Α: Beta: 主要: 我希望我不要过分简化。我的问题是如何从Alpha中的方法访问cBeta.DoSomethingBeta()? 问题答案: 你需要以某种方式为Alpha类提供对cBeta的引用。有三种方法可以做到这一点。 1)在构造函数中为Alphas提供Beta。在Alpha课堂上写道: 并从main()调用cAlpha = new A

  • 我有一个类Main(它具有公共静态void Main(String[]args))和另一个类MyDocument。 Main类中存在一个变量,我想从MyDocument类中的函数alphabetOccurrence()访问该变量。我该怎么做呢?我不想用它作为静态变量。任何修改只能在函数中进行,其余的代码应该保持不变。