Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当只知道目录的相对路径时,如何读取目录中的文件_Java_File - Fatal编程技术网

Java 当只知道目录的相对路径时,如何读取目录中的文件

Java 当只知道目录的相对路径时,如何读取目录中的文件,java,file,Java,File,在我的java应用程序中, 1.我有目录的相对路径(目录和其中的文件是构建的一部分) 2.目录包含多个文件 3.我想读取父目录中的文件名。 4. 文件可以在以后更改,而且数量很多,因此我不知道文件的名称,也不希望在添加、删除或重命名更多文件时更改代码 现在,我不知道文件的名称,因为它们可能会在以后更改(有多个文件,可以根据环境而变化)。我只知道文件的父目录的相对路径 如何读取文件?您可以通过file类的file.getlistFiles()方法获取该目录下所有文件的列表。 它返回一个文件数组。

在我的java应用程序中,
1.我有目录的相对路径(目录和其中的文件是构建的一部分)
2.目录包含多个文件
3.我想读取父目录中的文件名。
4. 文件可以在以后更改,而且数量很多,因此我不知道文件的名称,也不希望在添加、删除或重命名更多文件时更改代码

现在,我不知道文件的名称,因为它们可能会在以后更改(有多个文件,可以根据环境而变化)。我只知道文件的父目录的相对路径


如何读取文件?

您可以通过file类的file.getlistFiles()方法获取该目录下所有文件的列表。 它返回一个文件数组。 即使您可以为您的文件定义过滤器,它也会准确地返回您想要的文件

try {
    File f = new File("D:/Programming");

    FilenameFilter filter = new FilenameFilter() {
        @Override
        public boolean accept(File f, String name) {
            // We want to find only .c files
            return name.endsWith(".c");
        }
    };

    // Note that this time we are using a File class as an array,
    // instead of String
    File[] files = f.listFiles(filter);
看看这个例子。 如果要使用相对路径,可以使用

System.getProperty("user.dir");
String relative  Path =System.getProperty("user.dir");
它返回您将应用程序放入其中的文件夹。 如果你的文件夹有一些子文件夹,你可以简单地使用file.list(); 它返回目录中所有文件和文件夹的名称。 字符串[]listOfMyFilesAndFolders=file.list(); 您可以将这些名称添加到路径以访问其他文件夹。 您可以使用检查路径是否为文件或文件夹

file.isDirectory();
for ( String path: listOfFilesAndFolders ) {
File file = new File(basePath+path);
if ( file.isDirectory() {
// it is a folder and you can use another for loop or recursion to navigate sub directories
} else {
// it is  a file and you can do everyThing you want}}
我认为你可以使用递归来遍历你的子目录,用它来阅读更多的内容
我希望能有所帮助。

这个问题问得很糟糕,文本有误导性。 “我有目录的相对路径(目录和其中的文件是构建的一部分)”意味着什么也并没有,你们必须澄清你们的意思

假设通过命令行参数获得相对目录(例如“/folder1/folder2”),则基本上有3种选择:

1) 以jar所在的目录作为“当前目录”启动程序,以便将其用作工作目录。这种方法要求,当您通过java-jar myapp.jar命令启动应用程序时,首先预先添加一个“cd”命令,将您自己直接放在目录中。代码看起来像@hamidreza75解决方案,但显然您没有变量“D:/Programming”,而是直接拥有读取文件的目录的相对路径

启动脚本

@echo off
cd {jar-folder}
java -jar myapp.jar
@echo off
java -jar {jar-folder}/myapp.jar {jar-folder}
java代码:

package com.sample.stack;

import java.io.File;
import java.io.FilenameFilter;

public class FileRenamenter {
    public static void main(String[] args) {
        final String relativePath = "folder1/folder2";
        File directory = new File(relativePath);
        String[] list = directory.list(new FilenameFilter(){
            public boolean accept(File dir, String name) {
                // filter condition
                return true;
            }
        });
        // echo file list
        for (String filePath : list) {
            System.out.println(filePath);
        }
    }
}
2) 通过命令行参数传递要控制的文件夹,如下所示:

启动脚本

@echo off
cd {jar-folder}
java -jar myapp.jar
@echo off
java -jar {jar-folder}/myapp.jar {jar-folder}
java代码(仅“目录”变量更改)

3) 以编程方式查找运行jar的文件夹[非常不推荐的做法],然后连接相对路径:

java代码(仅“目录”变量更改):


“文件(“D:/Programming”)”这里您使用了绝对路径。该目录是构建的一部分,它有子文件。我有目录的相对路径。如果你想使用相对路径,你可以使用感谢更新你的答案,我会用我的应用程序检查它。同时,我对它进行了升级,将接受它,因为它对我的应用程序有效…我更新了我的答案,以满足您的需要,请再次阅读,如果有帮助,请按“接受”作为答案并投票