我正在研究这个例子:
http://www.vogella.com/articles/JavaPDF/article.html
在我的档案中,我有:
package com.mycompanyname.mydirectory;
import com.mycompanyname.OneOfMyClasses;
import com.itextpdf.text.Document;
...
public class MyClass {
...
}
一切都很好。我不明白的是,因为我只是直接从上面的链接复制了导入语句的iText部分 - 为什么com.itextpdf.text.Document
有效?
我的意思是,如果我查看目录com.mycompanyname
,我可以看到OneOfMyClasses.java
。
但直接在com
中,没有itextpdf
目录(尽管我的用户可能没有权限查看它(?))。
希望有人能帮我理解我在这里缺少的东西。导入是否指向我应该能够看到该类的特定目录?在iText使用的某个地方是否有不同的com
目录,并且com.itextpdf.text
指向那里? (如果是,目录所在的位置)?
我按照惯例在lib
文件夹中安装了iText的jar文件,并确保它包含在类路径中。
答案 0 :(得分:7)
这些类位于添加到类路径的JAR文件中:
使用“de.vogella.itext.write”包创建一个新的Java项目“de.vogella.itext.write”。创建一个文件夹“lib”并将 iText库(jar文件)放入此文件夹。 将jar添加到类路径。
import语句将查看类路径中的任何目录树,其中包括编译时的当前目录(通常是项目中的src /目录)以及通过环境变量或JVM启动参数指定的任何目录。有关类路径,请参阅this。
修改强>
每当您跨包使用类时,都需要导入。您定义的每个公共类/接口都在一个包中。如果您引用的任何内容属于另一个包,则需要将其导入。
JAR是包含目录和文件的zip文件。它与普通目录和文件相同,只是打包。
答案 1 :(得分:1)
它来自您在之前步骤中添加的iText依赖项(jar)。
答案 2 :(得分:1)
不一定 - 您也可以从图书馆等导入
事实上,Java将尝试搜索classpath。这是一些有用的documentation。
答案 3 :(得分:1)
该类很可能是在JAR
库中导入的。在这样的JAR文件中,类文件保存在导入时使用的精确包/文件夹结构中。