Java 修剪文件名,使其足够短
我目前正在编写一个基于API的Gui,我希望在其中显示完整的文件名。。。 文件名通常太长,因此我想修剪此文件名,以便根据需要只保留少量文件夹。 例如: C:\Users\RoiEX\someFolder\SomeOtherFolder\someFile.someExtension 应该修剪成类似的形状 C:\…\someOtherFolder\someFile.someExtension 我有一个变量fileName,它是通过调用Java 修剪文件名,使其足够短,java,string,file,path,Java,String,File,Path,我目前正在编写一个基于API的Gui,我希望在其中显示完整的文件名。。。 文件名通常太长,因此我想修剪此文件名,以便根据需要只保留少量文件夹。 例如: C:\Users\RoiEX\someFolder\SomeOtherFolder\someFile.someExtension 应该修剪成类似的形状 C:\…\someOtherFolder\someFile.someExtension 我有一个变量fileName,它是通过调用file.getAbsolutePath()生成的。 我有一个方法
file.getAbsolutePath()
生成的。
我有一个方法,我们称之为tooLarge(fileName)
我想这样开始:
String fileName = file.getAbsolutePath();
while(tooLarge(fileName)){
fileName = trimPath(fileName);
}
render(fileName);
在trimPath()中我应该做什么
如果您知道该目录的路径,并且正在转换为相对路径,则非常感谢您的帮助
final String PATH = "C:\\Users\\RoiEX\\someFolder";
String path = filename.replaceFirst(PATH, "C\\..\\");
如果您知道该目录的路径,并且正在转换为相对路径,则可以这样做
final String PATH = "C:\\Users\\RoiEX\\someFolder";
String path = filename.replaceFirst(PATH, "C\\..\\");
带有replaceAll()
的适当正则表达式适用于您:
public static void main(String[] args) {
String s = "C:\\asas\\Users\\RoiEX\\someFolder\\SomeOtherFolder\\someFile.someExtension";
System.out.println(s.replaceAll("(\\w+:\\\\).*?(\\\\\\w+\\\\\\w+.\\w+)$", "$1...$2"));
}
O/p:
上面的正则表达式选择最后一个起始目录和文件名为的最后一个目录。带有replaceAll()
的适当正则表达式将适用于您:
public static void main(String[] args) {
String s = "C:\\asas\\Users\\RoiEX\\someFolder\\SomeOtherFolder\\someFile.someExtension";
System.out.println(s.replaceAll("(\\w+:\\\\).*?(\\\\\\w+\\\\\\w+.\\w+)$", "$1...$2"));
}
O/p:
上面的正则表达式选择最后一个起始目录和文件名为的最后一个目录。何时修剪文件名?。条件是什么?@thelost注意上面的代码应该在RenderId看到时被调用。所以,你已经知道长度更大,并决定修剪它。这个问题似乎很奇怪。。。其他人应该如何知道您的目录结构以及应该在哪里找到您的文件?没有人可以在不知道您的条件和规范是什么的情况下为您编写方法。在提问之前,您应该提出一些具体的标准,否则此问题有被关闭的风险。您想何时修剪文件名?。条件是什么?@thelost注意上面的代码应该在RenderId看到时被调用。所以,你已经知道长度更大,并决定修剪它。这个问题似乎很奇怪。。。其他人应该如何知道您的目录结构以及应该在哪里找到您的文件?没有人可以在不知道您的条件和规范是什么的情况下为您编写方法。在提问之前,你应该提出一些具体的标准,否则这个问题有被关闭的风险。我希望这个平台独立。因为路径可能会根据平台的不同而有所不同,所以让第一个和最后一个目录存在,并用..(点,点)替换你认为固定的路径。在这种情况下,如果您知道RoiEX\\someFolder是一个固定路径,只需将其替换为点,点。我希望此平台独立。由于路径可能因平台的不同而异,请将第一个和最后一个目录放在那里,并将您认为将固定的路径替换为..(点,点)。在这种情况下,如果您知道RoiEX\\someFolder是一个固定路径,只需将其替换为一个点,dot.UNIX文件系统的任何其他正则表达式?@RoiEX-是否工作不正常?是的。我们还应该在文件夹/文件名中允许空格。。等一下@RoiEX@RoiEX-我知道:)@RoiEX-OKreplaceAll((/\\w+).*?(/\\w+/\\w+。\\w+),“$1…$2”)
是UNIX的正则表达式。我认为应该为windows和linux系列使用if-else条件和两个单独的正则表达式。linux系列路径以/
开头,因此您可以检查是否有任何其他适用于UNIX文件系统的正则表达式?@RoiEX-是否工作不正常?是的。我们还应该在文件夹/文件名中允许空格。。等一下@RoiEX@RoiEX-我知道:)@RoiEX-OKreplaceAll((/\\w+).*?(/\\w+/\\w+。\\w+),“$1…$2”)
是UNIX的正则表达式。我认为应该为windows和linux系列使用if-else条件和两个单独的正则表达式。linux系列路径以/
开头,因此您可以检查它