这是输入字符串:
"C:\jdk1.6.0\bin\program1.java"
我需要输出为:
Path-->C:\jdk1.6.0\bin\
file--->program1.java
extension--->.java
注意“\”字符。我很容易得到“/".
的输出答案 0 :(得分:21)
File课程为您提供所需的一切:
File f = new File("C:\\jdk1.6.0\\bin\\program1.java");
System.out.println("Path-->" + f.getParent());
System.out.println("file--->" + f.getName());
int idx = f.getName().lastIndexOf('.');
System.out.println("extension--->" + ((idx > 0) ? f.getName().substring(idx) : "") );
编辑:感谢Dave注意到如果File.getName不包含'。',String.lastIndexOf将返回-1。
答案 1 :(得分:9)
考虑使用现有的解决方案,而不是自己滚动并引入更多需要测试的代码。 Apache Commons IO的FilenameUtils就是一个例子:
答案 2 :(得分:3)
由于Java的File
类不支持探测扩展,我建议你创建一个File
的子类来提供这种能力:
package mypackage;
/**
* Enhances java.io.File functionality by adding extension awareness.
*/
public class File extends java.io.File {
/**
* Returns the characters after the last period.
*
* @return An empty string if there is no extension.
*/
public String getExtension() {
String name = getName();
String result = "";
int index = name.lastIndexOf( '.' );
if( index > 0 ) {
result = name.substring( index );
}
return result;
}
}
现在只需用您的File for Java版本替换,并结合Kurt的答案,为您提供所需的一切。
请注意,使用子类是理想的,因为如果您想要更改行为(由于使用不同的扩展分隔符令牌的操作系统不同),您只需更新单个方法,整个应用程序就可以继续工作。 (或者,如果您需要修复错误,例如尝试执行str.substring( -1 )
。)
换句话说,如果您在代码库中的多个地方中提取文件扩展名,则表示您犯了错误。
进一步说,如果你想完全抽象出文件类型的知识(因为某些操作系统可能不使用.
分隔符),你可以写:
/**
* Enhances java.io.File functionality by adding extension awareness.
*/
public class File extends java.io.File {
public File( String filename ) {
super( filename );
}
/**
* Returns true if the file type matches the given type.
*/
public boolean isType( String type ) {
return getExtension().equals( type );
}
/**
* Returns the characters after the last period.
*
* @return An empty string if there is no extension.
*/
private String getExtension() {
String name = getName();
String result = "";
int index = name.lastIndexOf( '.' );
if( index > 0 ) {
result = name.substring( index );
}
return result;
}
}
我认为这是一个更强大的解决方案。这将无缝地允许替换更高级的文件类型检测机制(分析文件内容以确定类型),而无需更改调用代码。例如:
File file = new File( "myfile.txt" );
if( file.isType( "png" ) ) {
System.out.println( "PNG image found!" );
}
如果用户将“myfile.png”保存为“myfile.txt”,则仍会处理该图像,因为高级版本(此处未显示)会查找启动每个PNG文件的“PNG”标记。 (网络)世界。
答案 3 :(得分:3)
您需要补偿Path中返回的双斜杠(如果已经以编程方式生成)。
//Considering that strPath holds the Path String
String[] strPathParts = strPath.split("\\\\");
//Now to check Windows Drive
System.out.println("Drive Name : "+strPathParts[0]);