1

現在、windows と osx で動作するように設計されたプログラムを開発しています。windows で完全に動作するファイルをコピーするこの機能がありますが、osx で試してみると、IOException: "no such file or directory" が発生しました。少し調べてみると、宛先ディレクトリが存在しない可能性があることがわかりました(存在していましたが)ので、次の行を追加しました:

if(!f2.getParentFile().exists())
{
    f2.getParentFile().mkdirs();
}
if(!f2.exists())
{
   f2.createNewFile();
}

これで問題は解決したようですが、コピーしたファイル(ドキュメントにある)を探したところ、最初は見つかりませんでしたが、プログラムが実際にファイルを保存したいフォルダーの複製フォルダーを作成したことがわかりましたに、まったく同じ「ドキュメント」名の 2 つのフォルダーが作成されました。残りのコードは次のとおりです。

    public static Boolean copyfile(String srFile, String dtFile )
{
    {
          try
          {
          File f1 = new File(srFile);
          File f2 = new File(dtFile);
          if(!f2.getParentFile().exists())
          {
              f2.getParentFile().mkdirs();
          }
          if(!f2.exists())
          {
              f2.createNewFile();
          }
          InputStream in = new FileInputStream(f1);
          OutputStream out = new FileOutputStream(f2);

          byte[] buf = new byte[1024];
          int len;
          while ((len = in.read(buf)) > 0){
          out.write(buf, 0, len);
          }
          in.close();
          out.close();
          System.out.println("File copied.");
          }
          catch(FileNotFoundException ex){
          System.out.println(ex.getMessage() + " in the specified directory.");
          JOptionPane.showMessageDialog(new JFrame(), ex.getMessage());
          return true;
          }
          catch(IOException e){
          System.out.println(e.getMessage());  
          JOptionPane.showMessageDialog(new JFrame(), e.getMessage());
          return true;
          }
          }
    return false;
}

これは明らかに望ましい結果ではありません。ファイルを保存するフォルダをプログラムが認識できるようにするにはどうすればよいですか?

更新: ls -B コマンドを使用すると、2 つのフォルダーが異なる言語で表示されました: "Documents" と "Documentos" は、両方ともファインダーに "Documentos" として表示されます。

4

2 に答える 2

2

そのため、まったく同じ「ドキュメント」名の2つのフォルダーになりました。

そんなことはあり得なかった。2 つのディレクトリの名前は (おそらく非常に微妙に) 異なります。たとえば、名前の末尾にスペースを含めることができます。

名前の違いが何であるかを理解すると、問題を修正する方法がかなり明確になるはずです。

これをトラブルシューティングするには、次のコマンドを使用でき ls -Bます\xxx。末尾のスペースなどについてls -1 | od -cは、出力を注意深く調べてください。

于 2013-01-19T21:35:30.803 に答える
0

Java 7を使用している場合は、java.nio.fileパッケージを使用してみてください。エラーがある場合は、はるかに有益なはずです。

Path source = Paths.get(srFile);
Path dest = Paths.get(dtFile);
Files.createDirectories(dest.getParent());
Files.copy(source, dest);

getMessage()Throwableのメソッドを呼び出さないことをお勧めします。多くの場合、例外クラスの横に表示されている場合を除いて、意味のない情報が提供されます。したがって、の代わりにprintln(ex.getMessage())、を使用しますprintln(ex)。もちろん、どちらよりもはるかに便利ですex.printStackTrace()

于 2013-01-19T21:16:33.730 に答える