Java拆分路径..?

时间:2010-12-13 18:00:54

标签: java string path split

这是输入字符串:

"C:\jdk1.6.0\bin\program1.java"

我需要输出为:

Path-->C:\jdk1.6.0\bin\
file--->program1.java
extension--->.java

注意“\”字符。我很容易得到“/".

的输出

4 个答案:

答案 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就是一个例子:

http://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/FilenameUtils.html

答案 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]);