web-dev-qa-db-ja.com

Java)で実行時にファイル拡張子を変更する方法

ファイルを圧縮および解凍するプログラムを実装しようとしています。私がしたいのは、ファイル(fileName.fileExtension)fileName.Zipそして解凍時に再度fileName.fileExtensionに変更します。

7
rahul0789

これは、ファイルの名前を変更したり、拡張子を変更したりするために使用した方法です。

_public static void modify(File file) 
    {
        int index = file.getName().lastIndexOf(".");
        //print filename
        //System.out.println(file.getName().substring(0, index));
        //print extension
        //System.out.println(file.getName().substring(index));
        String ext = file.getName().substring(index);
        //use file.renameTo() to rename the file
        file.renameTo(new File("Newname"+ext));
    }
_

編集:ジョンのメソッドはファイルの名前を変更します(拡張子は保持します)。拡張子を変更するには、次のようにします。

_public static File changeExtension(File f, String newExtension) {
  int i = f.getName().lastIndexOf('.');
  String name = f.getName().substring(0,i);
  return new File(f.getParent() + "/" + name + newExtension);
}
_

これは、最後の拡張子をファイル名、つまり_.gz_の_archive.tar.gz_部分に変更するだけです。したがって、名前が_._で始まるLinuxの隠しファイルでは正常に機能します。これは、getParent()nullを返す場合(つまり、親がシステムルート)ファイルコンストラクタへの引数全体が最初に評価されるため、空の文字列に「キャスト」されます。

面白い出力が得られる唯一のケースは、システムルート自体を表すファイルを渡す場合です。この場合、パス文字列の残りの部分の前にnullが付加されます。

5
John

試してみてください:

File file  = new File("fileName.Zip"); // handler to your Zip file
File file2 = new File("fileName.fileExtension"); // destination dir of your file
boolean success = file.renameTo(file2);
if (success) {
    // File has been renamed
}
5
hsz

変更する前に、ファイルに拡張子があるかどうかを確認します。以下の解決策は、拡張子のないファイルまたは複数の拡張子でも機能します

public File changeExtension(File file, String extension) {
    String filename = file.getName();

    if (filename.contains(".")) {
        filename = filename.substring(0, filename.lastIndexOf('.'));
    }
    filename += "." + extension;

    file.renameTo(new File(file.getParentFile(), filename));
    return file;
}

@Test
public void test() {
    assertThat(changeExtension(new File("C:/a/aaa.bbb.ccc"), "txt"), 
                            is(new File("C:/a/aaa.bbb.txt")));

    assertThat(changeExtension(new File("C:/a/test"), "txt"), 
                            is(new File("C:/a/test.txt")));
}
3
JavaBohne
FilenameUtils.getFullPathNoEndSeparator(doc.getDocLoc()) + "/" +
     FilenameUtils.getBaseName(doc.getDocLoc()) + ".xml"
0
Pankaj

@hszで述べたのと同じロジックですが、代わりに単に置換を使用します。

File file  = new File("fileName.fileExtension"); // creating object of File 
String str = file.getPath().replace(".fileExtension", ".Zip"); // replacing extension to another 
file.renameTo(new File(str)); 
0
invzbl3