如何在NetBeans项目中计算行数

35

我有NetBeans 7,并想知道如何计算项目的总行数。我在Google上搜索过,但每次搜索都只能找到死胡同或不起作用的插件。是否有人知道如何计数行?


我成功地在NetBeans 7.3中使用了wordcount。 - Jane Norrie
5个回答

32

您可以使用适用于8.2版本的nb-wordcount插件代替适用于7.1版本的wordcount插件。

要配置wordcount,请进入 工具->选项->其它如果你想匹配Java和Groovy之外的其他文件,则必须更改接受文件名

要显示计数窗口,请进入窗口->打开WordCount窗口

要显示统计信息,请点击WordCounting(第二个按钮)。它将显示在项目(窗口)中选择的目录的统计信息(它必须是一个包或类似源包或Web页面,如果选择了项目则不起作用)。

此外,如果您在Linux上运行,可以执行以下操作:

 find . -name '*.java' | xargs wc -l

1
“wordcount”插件在Netbeans 7.3.1中无法工作,我可以单击任何范围并始终扫描0个文件。 - s3m3n
我刚用 NetBeans 8.0.2 进行了测试,它完美地工作了。 - David Palmiter
1
链接到字数统计已经损坏了 ;) - Maverick283

24

我知道这可能是一个非常老的问题,但是有一种更简单的方法可以找到NetBeans项目中行数的数量,而不需要安装插件:

  1. 右键单击您要查找行数的文件夹或包
    注意:不要右键单击项目本身,否则它将导致计算生成文件中所有行数。
  2. 单击“查找”或“在文件中查找”或按CtrlF
  3. 确保“匹配”下拉列表设置为“正则表达式”。
  4. 在搜索框中键入\n
  5. 点击查找,项目的行数将显示在
    搜索结果 标签页的顶部。

注意:在NetBeans中,搜索结果最多只显示5000条记录,如果你的项目超过了这个限制,则无法使用此方法


1
呵呵,我为什么没想到呢! :-D - Simba
4
限制为5000场比赛。 - Yevgen

16
我希望你能提供一个剪切和粘贴的答案,所以我写了一个。 编辑:支持数百万行代码,无需外部库。
编辑:支持数百万行代码,无需使用外部库。
public static void main(String[] args) throws FileNotFoundException {

    final String folderPath = "D:\\Dev\\MYPROJECT\\src";

    long totalLineCount = 0;
    final List<File> folderList = new LinkedList<>();
    folderList.add(new File(folderPath));
    while (!folderList.isEmpty()) {
        final File folder = folderList.remove(0);
        if (folder.isDirectory() && folder.exists()) {
            System.out.println("Scanning " + folder.getName());
            final File[] fileList = folder.listFiles();
            for (final File file : fileList) {
                if (file.isDirectory()) {
                    folderList.add(file);
                } else if (file.getName().endsWith(".java")
                        || file.getName().endsWith(".sql")) {
                    long lineCount = 0;
                    final Scanner scanner = new Scanner(file);
                    while (scanner.hasNextLine()) {
                        scanner.nextLine();
                        lineCount++;
                    }
                    totalLineCount += lineCount;
                    final String lineCountString;
                    if (lineCount > 99999) {
                        lineCountString = "" + lineCount;
                    } else {
                        final String temp = ("     " + lineCount);
                        lineCountString = temp.substring(temp.length() - 5);
                    }
                    System.out.println(lineCountString + " lines in " + file.getName());
                }
            }
        }
    }
    System.out.println("Scan Complete: " + totalLineCount + " lines total");
}

结果看起来类似于以下内容:

   (truncated)
   47 lines in WarningLevel.java
Scanning design
 1367 lines in ProcessResultsFrame.java
   83 lines in TableSettingPanel.java
Scanning images
Scanning settingspanel
   67 lines in AbstractSettingPanel.java
  215 lines in AdvancedSettingsPanel.java
   84 lines in BaseSettingsPanel.java
  451 lines in DatabasePanel.java
  488 lines in EmailPanel.java
  458 lines in FTPGUIPanel.java
  482 lines in FTPScheduledTaskPanel.java
  229 lines in GUISettingPanel.java
   87 lines in RootSettingJPanel.java
  722 lines in ServerVisualIdentificationSettingPanel.java
Scan Complete: 123685 lines total

如果有什么漏掉的,请告诉我,我会尽力纠正。谢谢!


我知道你的回答有点老了,但我尝试了一下,在Windows 11上遇到了字符集问题,所以我会在这里留下它。我不得不在Scanner构造函数中添加, Charset.forName("Cp1252"),这反过来又让我使用try-with子句来处理可能引发的IOException。 这样做将我的行数从4222增加到5332,这似乎更合理(我有0行文件)。 - Anab

3

1
尝试过了,但它从未显示有多少行。 - me me
尝试这个:Windows > 源代码度量;然后右键单击您的项目并选择源代码度量。 - ltin
在我的Mac OS X 10.7.4上,使用NetBeans IDE 7.1.2,这对我很有效。以防万一,这是我使用此插件时所做的事情,以及我得到的确切结果。http://ffb777.data.s3.amazonaws.com/sof/sourcecodemetrics-netbeansplugin.jpg - ltin
对于任何使用Windows 7上的Netbeans 7.2的人来说,它并不能直接使用。Netbeans一直在寻找旧版本的jars,并且不接受新版本。它破坏了我的配置,我必须手动删除插件才能让Netbeans重新启动。 - Arthur Weborg
搜索 LOC 列(代码行数)。 - Vinícius Fonseca
在我的Netbeans 8.0中,“源代码度量”窗口出现在左侧列,靠近“项目”,“文件”等标签。必须将其移动到主窗格中才能看到任何内容。 - amrtn

0

@Johnathan, 我喜欢你的简单而有用的代码行数统计程序。在使用它进行我的项目时,我发现 Scanner 并不总是能正确地计算出行数,有时甚至对于某个特定文件它都无法计算一行。 一番调查后,我找到了这篇文章Java scanner not going through entire file。看起来 Scanner 在处理不同编码时存在一些问题。为了避免这种情况并使程序更加可靠,我建议将 Scanner 替换为 BufferedReader,像这样:

[...]
//  final Scanner scanner = new Scanner(file);
//  while (scanner.hasNextLine()) {
//      scanner.nextLine();
//      lineCount++;
//  }
InputStream is = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (br.readLine() != null) {
    lineCount++;
}
[...]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接