作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
public void searchStringInFile(String directory, String word)
{
if (word != null && directory != null)
{
File filePath = new File(directory);
Queue<File> queue = new LinkedList<>();
queue.add(filePath);
while (!queue.isEmpty())
{
File currentFile = queue.poll();
File[] listOfDirectories = currentFile.listFiles();
if (listOfDirectories != null)
{
for (File file : listOfDirectories)
{
if (file.isDirectory())
{
queue.add(file);
}
else
{
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
readText(file, word);
}
});
thread.start();
}
}
}
}
}
}
private void readText(File file, String word)
{
Scanner scan = null;
try
{
scan = new Scanner(file);
String line;
int lineNumber = 0;
while (scan.hasNextLine())
{
line = scan.nextLine();
lineNumber++;
if (line.contains(word))
{
System.out.println("Line: " + lineNumber + " contains the word: " + word + " at file: " + file.getAbsolutePath());
}
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
finally
{
close(scan);
}
String(word)
。我想使其成为多线程应用程序-当它进入目录(或找到目录)时,它必须启动
new Thread
并开始在文件中搜索,而我实际上并不知道该怎么做。我使它像上面的代码一样,每次打开文件时都启动
new Thread
,但是必须在进入目录时才启动。
最佳答案
如果我正确理解了您的问题,并且希望在循环之后启动线程,则可以这样进行:
public void searchStringInFile(String directory, String word){
if (word == null || directory == null) {
return;
}
File filePath = new File(directory);
Queue<File> queue = new ConcurrentLinkedQueue<>();
queue.add(filePath);
while (!queue.isEmpty()) {
File currentFile = queue.poll();
File[] listOfDirectories = currentFile.listFiles();
if (listOfDirectories != null)
{
new Thread(() -> {
for (File file : listOfDirectories)
{
if (file.isDirectory()) {
queue.add(file);
} else {
readText(file, word);
}
}
}).start();
}
}
}
关于java - 每次在目录Java中搜索时如何创建新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733636/
嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。 我的代码是这样的; type Line =
我是一名优秀的程序员,十分优秀!