将.java文件导入正确的包

时间:2012-12-19 13:24:43

标签: eclipse package

我有一堆*.java源文件,其中包含各种包中的类。我试图将所有这些文件导入Eclipse项目,但Eclipse总是将它们放在默认包中。

如何告诉Eclipse将每个文件放在相应的软件包子目录中,这样我就不必手动创建所有各种软件包了?

我已尝试从文件系统导入功能以及将文件复制到项目中,所有这些文件都会将文件放在default包中,而不是在文件中明确说明每个文件顶部的package语句。

相关的SO问题仅涉及referencing packages outside of the project's src directory hierarchymanually creating files in the suitable package directorymissing import statementsbulk-renaming packages,但似乎尚未讨论此问题。

更新:根据评论中的要求,以下是一些示例文件:

Test1.java

package some.random.pkg;

public class Test1 {
}

Test2.java

package some.other.pkg;

public class Test2 {
}

Test3.java

package yet.another.pkg;

public class Test3 {
}

将它们全部放在同一目录中,然后尝试将它们导入Eclipse中的Java项目,而无需手动创建各种包的目录。

更新2:为了澄清比例,假设每周实际上有大约100个这样的文件(当然,内容更多;-)),这就是为什么我正在寻找自动化解决方案。

6 个答案:

答案 0 :(得分:9)

我有点无聊,所以我创建了一个Java应用程序来从它的当前工作文件夹中获取所有.java文件,并将它们放在相应的子文件夹中。

然后,您可以将新创建​​的文件夹/文件复制/粘贴到Eclipse中。

源代码和runnable .jar:https://github.com/felipeweber/OrganizeJavaSources

要执行它,您将在您拥有所有.java文件的文件夹中复制/粘贴runnable .jar,并从提示符或命令行使用java -jar OrganizeJavaSources.jar运行它。 它应该适用于Linux和Windows(也可能适用于MacOS)。

在我的测试中,它与理智文件完美配合。 请注意我没有做任何错误处理,所以第四,但随时可以贡献。

祝你好运

答案 1 :(得分:2)

我们这里的程序员对吗?所以到目前为止我做的研究很难在任何IDE中找到这种功能,因为必须警告程序员他将java文件放在一个不正确的包中,并且不能自动为程序员安排它。

嗯,我建议你创建一个简单的java控制台程序,可以为你做文件操作,我知道这对你来说很容易。这将是该程序的可能算法

  1. 阅读.java文件
  2. 检查{。1}行直到该.java文件上的终结符package
  3. 根据包名重新定位该文件,将;替换为目录分隔符可以用作重定位文件的地址。
  4. 如果文件的重定位文件夹不存在,则创建文件夹
  5. 重复执行此操作,直到重新定位所有文件。
  6. 我也希望这种功能不仅可以在日食中使用,还可以在其他IDE的病情上等待这个问题的进一步解答。

答案 2 :(得分:2)

根据这个link,你可以得到你真正想做的事情。

档案 - >新项目/动态Web项目

然后

档案 - >单击“新建文件夹”,单击“高级”,然后选择“链接到文件系统中的文件夹”。

然后右键单击该文件夹并选择BuildPath - >用作源文件夹.. 就是这样..

OR

您可以创建一个新文件夹,复制包含* .java文件的最顶层文件夹并粘贴它。然后右键单击它,选择BuildPath - >用作源文件夹......

我希望它对你有用!!

答案 3 :(得分:2)

你需要一个黑客。 我希望你使用的是linux,否则会更加困难:)

1-创建一个读取和执行.sh文件的小程序    这是一个片段,展示了如何从脚本中读取

 ProcessBuilder pb = new ProcessBuilder("myshell.sh", "myArg1", "myArg2");
 Process p = pb.start();

2-创建.sh脚本并确保java正确选择它(只需在脚本中放置一些echo消息并确保其被打印)

3-这个hack的目标是尝试使用 grep 来读取扩展名为.java的所有文件并将其传递给 mv 程序,这将是把它们放在正确的文件夹中。

4-您将了解如何将文件放入哪个文件夹(包),因为您可以使用 cat 读取每个文件,这样就可以确定应该去哪里。 mkdir 命令可以帮助您在移动文件之前正确创建文件夹。

5-如果您对此解决方案不确定,请告诉您这是一项非常复杂的任务,需要您仔细检查并识别所有模式。我相信这是可能的,你可以使用条件管道逻辑和一些很好的放松休闲音乐来帮助你集中注意力。

在这里,我结束了一些BASH guide来刷新你的想法

祝你好运,2013新年快乐

答案 4 :(得分:1)

当文件包含错误时,Eclipse会提供您通过移动文件来修复错误。使用“快速修复”功能(在错误视图中选择,按CTRL + 1),您可以轻松移动它们。尝试一次选择它们,也许你的Eclipse版本比我的版本更新,并且可以一次性修复它们。如果没有,它仍然比手动创建包快。

答案 5 :(得分:1)

所以这就是我做的......

  1. 新 - > Java项目 (选项:单击“将源项目文件夹用作源和类文件的根目录”)

  2. 下一步

  3. 选择“链接其他来源”(在“详细信息”下)

  4. 浏览“链接文件夹位置”并选择顶部文件夹(包含所有包裹等)。

  5. 完成

  6. 如果您已创建项目,那么......

    1. 右键单击包浏览器中的项目,然后选择属性

    2. 选择“Java Build Path”

    3. 选择“链接源”(在“源”选项卡上)

    4. 浏览“链接文件夹位置”并选择顶部文件夹(包含所有包裹等)。

    5. 完成

    6. 如果您的文件不在与其中定义的包相对应的目录中,则请备份您的文件(即将它们全部复制到另一个目录)并尝试以下操作:

      使用 javac MakePackDirs.java 编译以下程序并使用 java MakePackDirs 运行,并根据包声明创建目录和文件结构,然后使用上述程序

      import java.util.regex.*;
      import java.util.*;
      import java.io.*;
      
      public class MakePackDirs {
      
          public static void main(String[] args) throws Exception {
      
              String pkg;
      
              for (File f : new File(".").listFiles(
                  new FilenameFilter () {
                     public boolean accept (File dir, String name) {
                         return name.endsWith(".java");
                     } })) {
      
                  if (f.isDirectory()) continue;
      
                  System.out.println("Processing " + f.getName());
                  Scanner s = new Scanner(f);
                  try {
                      Pattern p = Pattern.compile("^[ ]*package +[^;]*", 
                                  Pattern.MULTILINE);
                      if ((pkg = s.findWithinHorizon(p,0))==null) continue;
                  }
                  finally {
                      s.close();
                  }
      
                  System.out.println("Found " + pkg);
      
                  pkg = pkg.split(" ")[1];
                  pkg = pkg.replaceAll("\\.","/").trim();
      
                  System.out.println("Creating " + pkg);
      
                  File dir = new File(pkg);
                  boolean created = dir.mkdirs();
      
                  if (!created && !dir.exists()) 
                      throw new Exception("Can't create package directory");
      
                  // Moving file
                  File dest = new File(dir, f.getName());
                  boolean renamed = f.renameTo(dest);
      
                  if (!renamed) 
                      throw new Exception("Can't move file to " + dest.getPath());
      
                  System.out.println(f.getName() + " moved to " + dir.getPath());
              }
          }
      }