【问题标题】:How to get rid of the file type when using getName()?使用 getName() 时如何摆脱文件类型?
【发布时间】:2012-10-07 22:10:20
【问题描述】:

只是因为我懒惰才这样做。我刚刚编写了一个程序,将我所有的音乐都列在一个 excel 文件中。

   import java.io.*;
   import org.apache.commons.io.FileUtils;

      public class NewClass {

        public static void main( String args[] ) 
        {
           File folder = new File("C:/Users/Public/Music/OldMusic");
           File[] listOfFiles = folder.listFiles();

            for (int i = 0; i < listOfFiles.length; i++) {
             try{
                 FileUtils.writeStringToFile(new File("test.xls"), listOfFiles[i].getName(), true);
                 BufferedWriter output;
                 output = new BufferedWriter(new FileWriter("test.xls", true));
                 output.newLine();
                 output.close();
             }
             catch (IOException e){
             }
          }
      }
     }

代码运行良好,但在每首歌曲的结尾都有 .mp3(即:Metallica - Nothing Else Matters.mp3)。

有没有办法只在歌曲的名称后面加上 .mp3

【问题讨论】:

  • “没有.mp3结尾的歌曲的名称?” 我有一个MP3集合,其中文件名通常不密切相关到曲目的标题,它本身在文件中嵌入的 ID3 v. 2 标签中得到了更好的表达。

标签: java


【解决方案1】:

由于您已经在使用FileUtils,请注意您获得了处理扩展的方法。

FileUtils.removeExtension

查看代码,您会发现这些处理文件扩展名的方法——还有getExtensionisExtension——都只使用lastIndexOf,所以它们只会处理简单的情况,但这应该是足以满足您的目的。

【讨论】:

  • +1,这肯定比直接的 lastIndexOf 解决方案更具可读性。并且那个取消引用数组元素两次。
【解决方案2】:

用途:

String fname = listOfFiles[i].getName();
fname.substring(0, fname.lastIndexOf("."))

而不是通过..

listOfFiles[i].getName()

【讨论】:

  • 现在变得越来越难以理解(主要是由于内联代码格式)。
  • :) 我只是在不断地编辑答案。我希望它现在看起来更好。
  • 看看你能不能接受我建议的编辑,如果不行就回滚。我认为它更清楚,因为颜色(数量有限)并且每个语句都在一行上。
  • 谢谢安德鲁,它看起​​来好多了。但是你是怎么做到的?块引用?
  • 选择一个代码示例并单击{} 按钮。它在所选文本的每一行之前插入 4 个空格,其余的将自动处理。我经常只是手动插入 4 个空格,但要确保代码“块”和前面的文本之间有一个空行(没有空行,格式化软件会混淆)。
【解决方案3】:
import java.io.*;
import org.apache.commons.io.FileUtils;

  public class NewClass {

    public static void main( String args[] ) 
    {
       File folder = new File("C:/Users/Public/Music/OldMusic");
       File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {
         try{
             FileUtils.writeStringToFile(new File("test.xls"), listOfFiles[i].getName().substring(0, listOfFiles[i].getName().indexOf(".mp3")), true);
             BufferedWriter output;
             output = new BufferedWriter(new FileWriter("test.xls", true));
             output.newLine();
             output.close();
         }
         catch (IOException e){
         }
      }
  }
 }

【讨论】:

  • 您可以将 listOfFiles[i].getName().indexOf(".mp3") 更改为 listOfFiles[i].getName().toLowerCase().indexOf(".mp3")跨度>
  • “你可以..”使用 ID3 v. 2 标签,所以“不,谢谢” .
  • 您会使用 ID3 v. 2 标签做什么?
  • 为标题。请参阅我对这个问题的评论。
  • 索引为 -1 表示在文件中找不到字符串“.mp3”。尝试添加 System.out.println(listOfFiles[i].getName());就在 writeStringToFile 行之前
猜你喜欢
  • 2017-09-17
  • 2016-08-01
  • 2021-02-19
  • 2019-11-28
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
相关资源
最近更新 更多