将类导入Java文件

时间:2013-07-25 16:53:44

标签: java class logging import

我目前正在学习使用Java开发,并且对创建其他用户可以导入其程序和使用的Java类感兴趣。是的,我知道我的示例类很简单而且很愚蠢但是我想学习这个概念并开始制作更复杂的类,人们可以将它们导入到他们的项目中。

我创建了一个简单的“ Logger ”类,在调用时会将文本记录到控制台和文本文件中以便于阅读。您可以使用以下命令调用此类...

Logger Logger = new Logger();
Logger.create();
Logger.log("This text will be logged to the console and log.log");

请参阅下面的记录器类。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Logger {
        FileWriter fw;
        BufferedWriter br;
        File file = new File("log.log");
        boolean fileExists = file.exists();
        public void log(String message) {
            try {
                fw = new FileWriter(file, true);
                br = new BufferedWriter(fw);
                Calendar cal = Calendar.getInstance();

                int hour = cal.get(Calendar.HOUR_OF_DAY);
                if(hour > 12)
                    hour = hour - 12;

                int minute = cal.get(Calendar.MINUTE);
                int second = cal.get(Calendar.SECOND);
                int millis = cal.get(Calendar.MILLISECOND);

                int ampm = cal.get(Calendar.AM_PM); 
                String ampmString;
                if(ampm == 1)
                    ampmString = "PM";
                else
                    ampmString = "AM";

                String now = String.format("%02d:%02d:%02d.%03d %s", hour, minute, second, millis, ampmString);

                System.out.println(now + " - " + message);
                br.write(now + " - " + message);

                br.newLine();
                br.close();
            } catch (Exception err) {
                System.out.println("Error");
            }

        }
        public void create() {
            try {
                fw = new FileWriter(file, true);
                br = new BufferedWriter(fw);
                SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-YYYY");
                String dateString = sdf.format(new Date());
                if(file.length() != 0)
                    br.newLine();
                System.out.println("Log: " + file.getAbsolutePath());
                br.write("--------------------" + dateString + "--------------------");
                br.newLine();
                br.close();
            } catch (Exception err) {
                System.out.println("Error");
            }
        }
    }

我遇到的问题是为了使用这个类我必须将它添加到我创建的每个项目中并想要使用它。有没有办法可以添加像mydomain.Logger.*;这样的导入,并能够访问这个类及其包含的方法?

我的问题,允许任何人以最简单的方式导入/使用我的Logger类的最佳方法是什么?我需要采取哪些步骤才能让他们这样做?

4 个答案:

答案 0 :(得分:1)

将您的类编译为JAR文件,然后将该jar添加到每个项目的类路径中。这是重用类的标准Java方法。

答案 1 :(得分:1)

每个班级都有一个package。您在文件顶部声明。对于你的班级,这可能是package com.mydomain;。 (您的示例未声明包,因此分配了default - 认为“无”。包对应于实际文件夹,例如您应该将Logger.java放在文件系统中的com/mydomain/路径中,以匹配上面的包声明。

现在,如果您在同一个包中创建一个类,只需在示例中声明一个变量,就可以使用Logger类。无需进口。

如果你在另一个包中创建新类,即com.otherdomain(这意味着它实际上位于文件系统中的不同文件夹中),那么你必须使用这样的import语句:{{ 1}}或import com.mydomain.Logger;否则编译器会显示错误,并且不允许您使用import com.mydomain.*;类。

如果您想让其他人使用您的课程,您可能会发送您的二进制版本(即编译的Logger)而不是源代码。你可能会把这个文件放在Logger.class中(这是一个或多或少的压缩文件结构)。

如果那时我想使用你的类,我可以将jar添加到我项目的jar,这样编译器和运行时系统就会知道在查找类时搜索这个文件。我可以在课堂上自己写一个classapth语句,然后我可以使用你的记录器。

我希望这可以解决问题

答案 2 :(得分:0)

您必须创建一个jar文件,然后人们可以将其导入到他们的项目中。

答案 3 :(得分:0)

Scala语言允许您导入任意对象的成员,但Java只允许您导入静态成员。您可以尝试使用static imports。但是,您需要将Logger类更改为具有静态log方法。由于您可能只想要一个记录器实例,我建议您使用singleton enum pattern

// Using "enum" instead of "class"
public enum Logger {
    // Create singleton instance
    INSTANCE;

    // Create static log method for export
    public static void log(String message) {
      INSTANCE.log(message);
    }

    // The rest of your class is unchanged
    FileWriter fw;
    BufferedWriter br;
    File file = new File("log.log");
    boolean fileExists = file.exists();
    public void log(String message) {
      // ...
    }
    public void create() {
      // ...
    }
}

现在,在您要使用的每个文件中,您只需执行import static mydomain.Logger.log;即可直接访问log方法!