0

これに関連する可能性のある他の投稿を実際にチェックしましたが、質問に対する回答が見つかりませんでした。したがって、これを新しく作成する必要がありました:

次のコードでは、指定された場所にファイルが作成されません。

    File as = new File ("C:\\Documents and Settings\\<user>\\Desktop\\demo1\\One.xls");
    if (!as.exists()) {
        as.createNewFile();
    }
    FileOutputStream fod = new FileOutputStream(as);
    BufferedOutputStream dob = new BufferedOutputStream(fod);
    byte[] asd  = {65, 22, 123};
    byte a1 = 87;
    dob.write(asd);
    dob.write(a1);
    dob.flush();

    if (dob!=null){
        dob.close();
    }
    if(fod!=null){
        fod.close();

コードは正常に実行され、FileNotFoundException は発生しません!! ここで見逃しているものはありますか?

4

2 に答える 2

1

次のようにコードを書き直すことができます。

BufferedOutputStream dob = null;
try {
    File file = new File("C:\\Documents and Settings\\<user>\\Desktop\\demo1\\One.xls");
    System.out.println("file created:" + file.exists());
    FileOutputStream fod = new FileOutputStream(file);
    System.out.println("file created:" + file.exists());
    BufferedOutputStream dob = new BufferedOutputStream(fod);
    byte[] asd = {65, 22, 123};
    byte a1 = 87;
    dob.write(asd);
    dob.write(a1);
    //dob.flush();
} 
catch (Exception ex) {
    ex.printStackTrace();
}
finally {
    if (dob != null) {
        dob.close();
    }
}
  • この場合、最上位のストリーム ハンドラのclose()メソッド( BufferedOutputStreamのもの) を呼び出すだけで済みます。

この出力ストリームを閉じ、ストリームに関連付けられている システム リソースをすべて解放します。FilterOutputStream の close メソッドは、その flush メソッドを呼び出してから、基になる出力ストリームの close メソッドを呼び出します。

  • そのため、ブロック内の行がストリームをフラッシュするためdob.flush()tryブロック内はコメントアウトされています。また、上記の apidoc の引用で述べたように、システム リソースを解放します (「ファイルを閉じる」など)。finally ブロックを使用することをお勧めします。dob.close()finally

try ブロックが終了すると、finally ブロックが常に実行されます。これにより、予期しない例外が発生した場合でも、finally ブロックが実行されます。しかし、finally は例外処理以外にも役立ちます。プログラマは、return、continue、break によってクリーンアップ コードが誤ってバイパスされるのを防ぐことができます。例外が予想されない場合でも、最終ブロックにクリーンアップ コードを配置することは常に良い方法です。

指定された File オブジェクトによって表されるファイルに書き込むファイル出力ストリームを作成します。このファイル接続を表すために、新しい FileDescriptor オブジェクトが作成されます。 まず、セキュリティ マネージャが存在する場合、 file 引数で表されるパスを引数として checkWrite メソッドが呼び出されます。

ファイルが存在するが通常のファイルではなくディレクトリである場合、存在しないが作成できない場合、またはその他の理由で開くことができない場合は、FileNotFoundException がスローされます。

FileDescriptorの場所:

ファイル記述子クラスのインスタンスは、開いているファイル、開いているソケット、またはバイトの別のソースまたはシンクを表す、基になるマシン固有の構造への不透明なハンドルとして機能します。ファイル記述子の主な実用的な用途は、それを格納する FileInputStream または FileOutputStream を作成することです。

アプリケーションは、独自のファイル記述子を作成しないでください。

このコードは、ファイルを生成するか、例外をスローする必要があります。例外をスローする条件が満たされていないことも確認しました。たとえば、文字列を置き換えていて、demo1 ディレクトリが存在します。これを新しい空のファイルに書き直して実行してください。

それでも同じように動作する場合は、何かを見逃していない限り、これはバグである可能性があります。その場合は、次の行をコードに追加して出力を投稿します。

 System.out.println(System.getProperty("java.vendor")+" "+System.getProperty("java.version"));

パスから判断すると、Win 7 を使用していると思いますね。バージョンは?

于 2013-01-17T12:21:05.280 に答える
-2

次に、ディレクトリに既にファイルがあることを意味します

于 2013-01-17T12:18:12.847 に答える