Как читать файлы в каталоге, когда известен только относительный путь к каталогу - PullRequest
0 голосов
/ 07 апреля 2020

В моем приложении java,
1. У меня относительный путь к каталогу (каталог и файлы в нем являются частью сборки).
2. Каталог содержит несколько файлов.
3. Я хочу прочитать имена файлов в родительском каталоге.
4. Файлы могут измениться позже и их много, поэтому я не знаю имен файлов и не хочу, чтобы мои код, который нужно изменить, если дополнительные файлы будут добавлены, удалены или переименованы в соответствии с окружающей средой). Я знаю только об относительном пути родительского каталога файлов.

Как читать файлы?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Вы можете получить список всех файлов этого каталога с помощью метода 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 (); он возвращает имена всех файлов и папок вашего каталога. String [] 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}}

. Я думаю, что вы можете использовать рекурсию для обхода ваших подкаталогов. Используйте рекурсия , чтобы узнать больше. Надеюсь, это поможет .

0 голосов
/ 07 апреля 2020

вопрос плохо задан, а текст вводит в заблуждение. «У меня есть относительный путь к каталогу (каталог и файлы в нем являются частью сборки)» означает мало и ничего, вам нужно уточнить, что вы имеете в виду.

Предполагая, что вы получите относительный каталог (например, «) / folder1 / folder2 ") через параметр командной строки, у вас в основном есть 3 варианта:

1) запустить программу с каталогом, в котором находится jar, как« текущий каталог », чтобы его можно было использовать в качестве рабочего каталога. Этот подход требует, чтобы при запуске приложения с помощью команды java -jar myapp.jar сначала вы добавляли команду «cd», чтобы поместить себя непосредственно в каталог. Код будет выглядеть как решение @ hamidreza75, но, очевидно, у вас будет не переменная «D: / Programming», а непосредственно относительный путь к каталогу, в который нужно читать файлы.

сценарий запуска

@echo off
cd {jar-folder}
java -jar myapp.jar

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
java -jar {jar-folder}/myapp.jar {jar-folder}

java код (изменяется только переменная "directory")

File directory = new File(args[0], relativePath); // note args[0]

3) программно найти папку, в которой выполняется jar [очень не рекомендуется), а затем объединить относительный путь:

java код (изменяется только переменная "directory"):

String jarFolder = ClassLoader.getSystemClassLoader().getResource(".").getPath();
File directory = new File(jarFolder, relativePath); // note jarFolder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...