gpt4 book ai didi

java - 按里面的文本内容搜索文件

转载 作者:行者123 更新时间:2023-11-29 08:01:50 25 4
gpt4 key购买 nike

我想创建一个程序来查找选定目录(例如:“C:/”)中包含特定单词的所有文本文件。

我想说:例如,我在“C:/”中有三个文本文件,里面有文本。

1.txt Hello world 这是测试

2.txt 再见,bla bla bla

3.txt 你好,我叫约翰

如果我输入单词“Hello”,程序必须找到 1.txt 和 3.txt

你能给我推荐什么?什么命令可以在这里帮助我?谢谢你的回答。

更新:现在我只有选择目录的代码:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;


public class SelectDirectory extends JPanel implements ActionListener {
JButton go;

JFileChooser chooser;
String choosertitle;

public SelectDirectory() {
go = new JButton("Select directory: ");
go.addActionListener(this);
add(go);
}

public void actionPerformed(ActionEvent e) {
chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setDialogTitle(choosertitle);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(true);

if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
System.out.println("getCurrentDirectory(): " +
chooser.getCurrentDirectory());
System.out.println("getSelectedFile() : " + chooser.getSelectedFile());
//
//
//
searchFiles(); // error here, I dont know really how to use this method
//
//
//
}
else {
System.out.println("No Selection ");
}
}

public Dimension getPreferredSize(){
return new Dimension(200, 200);
}

public static void main(String s[]) {
JFrame frame = new JFrame("");
SelectDirectory panel = new SelectDirectory();
frame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
frame.getContentPane().add(panel,"Center");
frame.setSize(panel.getPreferredSize());
frame.setVisible(true);
}

private ArrayList<String> searchFiles(File file, String pattern,
ArrayList<String> result) throws FileNotFoundException {

if (!file.isDirectory()) {
throw new IllegalArgumentException("file has to be a directory");
}

if (result == null) {
result = new ArrayList<String>();
}

File[] files = file.listFiles();

if (files != null) {
for (File currentFile : files) {
if (currentFile.isDirectory()) {
searchFiles(currentFile, pattern, result);
} else {
Scanner scanner = new Scanner(currentFile);
if (scanner.findWithinHorizon(pattern, 0) != null) {
result.add(currentFile.getName());
}
scanner.close();
}
}
}
return result;
}
}

最佳答案

遍历文件

如果您使用的是 Java7,请使用 Files.walkFileTree(args) 遍历树:doc

如果您使用的是低于版本 7 的 Java,只需递归地使用 File.listFiles()

在文件中查找

使用 Scanner.findWithinHorizo​​n(String pattern, int horizo​​n) 找到你想要的任何正则表达式: doc

这是一个如何做到这一点的例子:

private List<String> searchFiles(File file, String pattern, List<String> result) throws FileNotFoundException {

if (!file.isDirectory()) {
throw new IllegalArgumentException("file has to be a directory");
}

if (result == null) {
result = new ArrayList<String>();
}

File[] files = file.listFiles();

if (files != null) {
for (File currentFile : files) {
if (currentFile.isDirectory()) {
searchFiles(currentFile, pattern, result);
} else {
Scanner scanner = new Scanner(currentFile);
if (scanner.findWithinHorizon(pattern, 0) != null) {
result.add(currentFile.getName());
}
scanner.close();
}
}
}
return result;
}

您可以像这样在代码中使用该方法:

 File folder = selectedFile.isDirectory() ? selectedFile : currentDirectory;
ArrayList<String> files = new ArrayList<String>();
try {
files = searchFiles(folder, "Hello", files);
} catch (FileNotFoundException e1) {
// you should tell the user here that something went wrong
}
// 'files' now contains the resulting file names

关于java - 按里面的文本内容搜索文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com