我遇到了一个Java代码问题,其中目录名称与文件名一起被拉出。我想修改以下代码以从给定目录中仅提取文件而不是子目录。我是一个Java新手,所以如果有人能用修改后的代码回答,我将不胜感激。我已经从过去的堆栈溢出答案中尝试了很多东西,但是无法将其编译。
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "DirectoryList" as import java.io.*;
import java.sql.*;
public class DirectoryList
{
public static void getList(String directory) throws SQLException
{
File path = new File(directory);
String[] list = path.list();
String element;
for(int i = 0; i < list.length; i++)
{
element = list[i];
#sql {
call Load_File_List_p(:element, :directory)
};
}
}
}
/
这是我已经尝试过的:
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "DirectoryList" as import java.io.*;
import java.sql.*;
public class DirectoryList
{
public static void getList(File directory) throws SQLException
{
File path = new File(directory);
File[] listOfFiles = path.listFiles();
for (File file : listOfFiles)
{
if (file.isFile())
{
for(int i = 0; i < listOfFiles.length; i++)
{
file = listOfFiles[i];
#sql {
call Load_File_List_p(:file, :directory)
};
}
}
}
}
}
/
谢谢!
答案 0 :(得分:1)
您的代码只有问题是循环迭代的额外位置。请看下面的代码:
import java.io.*;
import java.sql.*;
public class DirectoryList
{
public static void getList(File directory) throws SQLException {
File path = new File(directory);
File[] listOfFiles = path.listFiles();
for (File file : listOfFiles)
{
if (file.isFile())
{
#sql {
call Load_File_List_p(:file, :directory)
};
}
}
}
}
答案 1 :(得分:0)
Java 8解决方案获取当前目录中的所有文件:
File path = new File(directory);
File[] list = path.listFiles();
List<File> files = Arrays.stream(list).filter(t->t.isFile()).collect(Collectors.toList());
G 以及所有文件,包括子文件夹:
public static List<File> getList(File directory)
{
File[] list = directory.listFiles();
final List<File> files = Arrays.stream(list).filter(t->t.isFile()).collect(Collectors.toList());
List<File> directories = Arrays.stream(list).filter(t->!t.isFile()).collect(Collectors.toList());
directories.stream().forEach(t->files.addAll(getList(t)));
return files;
}
答案 2 :(得分:0)
你有一些SQL东西我删除了,因为问题是关于文件列表,而不是SQL。你很亲密。你的内在for循环绊倒你需要被抛出,就是这样。你为每个文件循环,然后为你在该文件上再次循环的每个文件循环,这样每个文件都被多次处理。
我使用的调用有两个可能的例外,所以我只是将它们放在方法签名中。
public void getList() throws SecurityException, NullPointerException
{
File path = new File("DirectoryName");
File[] listOfFiles = path.listFiles();
if (listOfFiles == null) {
System.out.println("There was an error.");
}
for (File file : listOfFiles)
{
if (file.isFile())
{
System.out.println(file.getName());
}
}
}
答案 3 :(得分:0)
listFiles()
方法有一个重载,为了您的方便需要FileFilter
。结合lambda,我们有:
File [] files = path.listFiles(File::isFile);
if (files != null) {
// listFiles may return null if path is not a directory or there's an IO issue.
for (File f : files) {
// do sth
}
}