gpt4 book ai didi

Java:如何获取路径的各个部分

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:05 25 4
gpt4 key购买 nike

这应该相当简单,但我只是卡住了。假设您有路径 /a/b/c/。我想将其转换为包含以下内容的数组:

  • /
  • /a/
  • /a/b/
  • /a/b/c/

开头和结尾的斜杠应该是可选的。有人愿意帮忙吗?

我打算将它用于创建目录的函数,并且我希望它也创建所有缺失的部分并且不会失败,例如 ab不存在。


更新: 如果可以的话,我当然会使用 File.mkdirs(),但这不在本地文件系统上。这是为了简化与 SFTP 库的接口(interface),该库只有 mkdir 方法采用字符串形式的路径。

最佳答案

为什么不直接使用 File.mkdirs()


编辑:根据您的要求不要使用 File.mkdirs():

我仍然认为将 File 用作辅助类会更容易:

package com.example.test;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

public class FileSplitter {
final private File path;

public List<String> getPathStrings()
{
LinkedList<String> list = new LinkedList<String>();
File p = this.path;
while (p != null)
{
list.addFirst(p.getPath());
p = p.getParentFile();
}
return list;
}

public FileSplitter(File path) { this.path = path; }

public static void main(String[] args) {
doit(new File("/foo/bar/baz"));
doit(new File("/bam/biff/boom/pow"));
}

private static void doit(File file) {
for (String s : new FileSplitter(file)
.getPathStrings())
System.out.println(s);
}
}

在我的机器 (windows) 上打印出:

\
\foo
\foo\bar
\foo\bar\baz
\
\bam
\bam\biff
\bam\biff\boom
\bam\biff\boom\pow

如果无论如何都需要使用正斜杠,那么我要么使用字符串而不是文件来实现,要么只执行 .replace('\\','/') 关于使用点。


最后,这里有一种方法可能对您的最终应用更有帮助。

它与之前的输出相同,但有助于控制反转您可以在其中执行自定义 mkdir() 作为伪 Runnable 以作为路径迭代器的一个步骤传递:

package com.example.test;

import java.io.File;

public class PathRunner
{
final private File path;
public PathRunner(File path) {
this.path = path;
}

public interface Step
{
public boolean step(File path);
}

public boolean run(Step step)
{
return run(step, this.path);
}
private boolean run(Step step, File p)
{
if (p == null)
return true;
else if (!run(step, p.getParentFile()))
return false;
else
return step.step(p);
}

/**** test methods ****/

public static void main(String[] args) {
doit(new File("/foo/bar/baz"));
doit(new File("/bam/biff/boom/pow"));
}
private static boolean doit(File path) {
Step step = new Step()
{
@Override public boolean step(File path) {
System.out.println(path);
return true;
/* in a mkdir operation, here's where you would call:

return yourObject.mkdir(
path.getPath().replace('\\', '/')
);
*/
}
};
return new PathRunner(path).run(step);
}
}

关于Java:如何获取路径的各个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com