Java - 从目录中获取文件名

时间:2016-07-26 22:11:50

标签: java oracle

我遇到了一个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)
                     };
             }
          }
       }
    }
}
/

谢谢!

4 个答案:

答案 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
    }
}