2016-11-21 13 views
2

非常にファイルを受け取り、いくつかの変更を行い、出力を別のファイルに保存する基本的なJavaプログラムです。私の問題は、私は同じ名前で、しかし別の拡張子でそれを保存したいということです。同じ名前で同じ拡張子の同じディレクトリにあるJava保存ファイル

現在のコードは、JFileChooserを使用して元のファイルを取得し、パスに変換し、.resolveSibling()メソッドを使用します。これは、しかし、同じ名前でファイルを保存するために何か良い方法はありますが、として切り抜いた拡張子を持つtest.ngc.fnc

に保存されているtest.ngcの出力になります1つ選んだ?

Path originalFile = null; 

JFileChooser chooser = new JFileChooser(".ngc"); 
chooser.setFileFilter(new FileNameExtensionFilter("Pycam G Code files", "ngc")); 
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) 
{ 
    originalFile = chooser.getSelectedFile().toPath(); 
} 

Path newFile = originalFile.resolveSibling(originalFile.getFileName() + ".fnc"); 

/* does reading and modification and saving here using BufferedReader and BufferedWriter*/ 
+0

元のファイル名から拡張子を削除してください。 substring()はあなたの友人です。 String javadocを読み込みます。 –

+0

私はPathにそれについての文書化されていない方法があることを望んでいました。非常に多くの辺のケースがあり、それが有益なものに見えたからです。 :(toString()それはそうです。 –

答えて

1

これは動作するはずです:

String originalFilename = originalFile.getFileName(); 
String fileNameNew = originalFilename.substring(0, originalFilename.length()-".ngc".length())+".fnc"; 
Path newFile = originalFile.resolveSibling(fileNameNew); 
1

を別の拡張子(.fnc)と異なるファイルに出力を保存するには、replaceFirstメソッドを使用していることを置き換えるためにregex(正規表現)を使用することができます。

Path originalFile ; 
    String pathName ; 

    JFileChooser chooser = new JFileChooser(".ngc"); 
    chooser.setFileFilter(new FileNameExtensionFilter("Pycam G Code files", "ngc")); 
    if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { 
     originalFile = chooser.getSelectedFile().toPath(); 

     pathName = originalFile.toAbsolutePath().toString().replaceFirst("\\b.ngc\\b", ""); 

     Path newFile = originalFile.resolveSibling(pathName + ".fnc"); 
     File file = new File(newFile.toUri()); 
     file.createNewFile(); 
    }