java 如何从给定的文件路径中获取子路径

68bkxrlz  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(154)

我想获取给定标记“html”后的路径,这是一个修复标记,文件路径如下

String token = "html"
Path path = D:\data\test\html\css\Core.css
Expected Output : css\Core.css

下面是程序的输入文件夹。和定义为代码中的常量。

public static final String INPUT_DIR = "D:\data\test\html"

这将包含输入html,css,js文件。并希望将这些文件复制到不同的位置E:\data\test\html\ here,因此只需从输入文件路径中提取html后的子路径,将其附加到输出路径。
假设输入文件是

D:\data\test\html\css\Core.css
D:\data\test\html\css\Core.html
D:\data\test\html\css\Core.js

因此,我想提取css\Core.css、css\Core.html、css\Core.js,将其附加到目标路径E:\data\test\html\以进行复制。
已在字符串[]数组=路径.tostring().split(“html”)下尝试;字符串子路径=数组[1];

Output : \css\Core.css

这不是预期输出,预期输出为css\Core.css此外,上述代码不适用于以下路径

Path path = D:\data\test\html\bla\bla\html\css\Core.css;
String [] array = path.toString().split("html");
String subpath = array[1];

在本例中,我得到了类似\bla\bla\的结果,这是意料之外的。

7cwmlq89

7cwmlq891#

如果您只需要字符串形式的路径,另一种解决方案是使用以下代码:

String path = "D:\\data\\test\\html\\css\\Core.css";
String keyword = "\\html";

System.out.println(path.substring(path.lastIndexOf(keyword) + keyword.length()).trim());

您可以如上所述将路径替换为file.getAbsolutePath()。

nue99wik

nue99wik2#

import java.io.File;
    
    public class Main {
      public static void main(String[] args) {
        // Create a File object for the directory that you want to start from
        File directory = new File("/path/to/starting/directory");
    
        // Get a list of all files and directories in the directory
        File[] files = directory.listFiles();
    
        // Iterate through the list of files and directories
        for (File file : files) {
          // Check if the file is a directory
          if (file.isDirectory()) {
            // If it's a directory, recursively search for the file
            findFile(file, "target-file.txt");
          } else {
            // If it's a file, check if it's the target file
            if (file.getName().equals("target-file.txt")) {
              // If it's the target file, print the file path
              System.out.println(file.getAbsolutePath());
            }
          }
        }
      }
    
      public static void findFile(File directory, String targetFileName) {
        // Get a list of all files and directories in the directory
        File[] files = directory.listFiles();
    
        // Iterate through the list of files and directories
        for (File file : files) {
          // Check if the file is a directory
          if (file.isDirectory()) {
            // If it's a directory, recursively search for the file
            findFile(file, targetFileName);
          } else {
            // If it's a file, check if it's the target file
            if (file.getName().equals(targetFileName)) {
              // If it's the target file, print the file path
              System.out.println(file.getAbsolutePath());
            }
          }
        }
      }
    }

这段代码使用递归函数搜索起始目录的所有子目录,如果找到目标文件(在本例中为“target-file.txt”),则打印该文件的路径。
您可以修改此代码以满足特定需要,例如更改起始目录或目标文件名。您还可以修改代码以对目标文件执行不同的操作,例如阅读其内容或将其复制到其他位置。

yh2wf1be

yh2wf1be3#

你的问题不够详细。

  • "路径"是Path还是String
  • 如何确定您想要"路径"的哪一部分?
  • 你知道"路径"的整个结构吗?或者你只知道分隔部分,例如 * html *?

这里有六种不同的方法(没有迭代,正如您在注解中所述)。前两种使用java.nio.file.Path的方法。后两种使用java.lang.String的方法。最后两种使用regular expressions。注意,可能还有其他方法。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PathTest {

    public static void main(String[] args) {
        // D:\data\test\html\css\Core.css
        Path path = Paths.get("D:", "data", "test", "html", "css", "Core.css");
        System.out.println("Path: " + path);
        Path afterHtml = Paths.get("D:", "data", "test", "html").relativize(path);
        System.out.println("After 'html': " + afterHtml);
        System.out.println("subpath(3): " + path.subpath(3, path.getNameCount()));
        String str = path.toString();
        System.out.println("replace: " + str.replace("D:\\data\\test\\html\\", ""));
        System.out.println("substring: " + str.substring(str.indexOf("html") + 5));
        System.out.println("split: " + str.split("\\\\html\\\\")[1]);
        Pattern pattern = Pattern.compile("\\\\html\\\\(.*$)");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            System.out.println("regex: " + matcher.group(1));
        }
    }
}

运行以上代码将生成以下输出:

Path: D:\data\test\html\css\Core.css
After 'html': css\Core.css
subpath(3): css\Core.css
replace: css\Core.css
substring: css\Core.css
split: css\Core.css
regex: css\Core.css

我假设您知道如何修改上述内容,以便
我想获取/test之后的文件路径

相关问题