次のようにコードを書き直すことができます。
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();
}
}
この出力ストリームを閉じ、ストリームに関連付けられている
システム リソースをすべて解放します。FilterOutputStream の close メソッドは、その flush メソッドを呼び出してから、基になる出力ストリームの close メソッドを呼び出します。
- そのため、ブロック内の行がストリームをフラッシュするため
dob.flush()
、try
ブロック内はコメントアウトされています。また、上記の apidoc の引用で述べたように、システム リソースを解放します (「ファイルを閉じる」など)。finally ブロックを使用することをお勧めします。dob.close()
finally
try ブロックが終了すると、finally ブロックが常に実行されます。これにより、予期しない例外が発生した場合でも、finally ブロックが実行されます。しかし、finally は例外処理以外にも役立ちます。プログラマは、return、continue、break によってクリーンアップ コードが誤ってバイパスされるのを防ぐことができます。例外が予想されない場合でも、最終ブロックにクリーンアップ コードを配置することは常に良い方法です。
- FileOutputStreamコンストラクターは、ディスク上に空のファイルを作成します。
指定された File オブジェクトによって表されるファイルに書き込むファイル出力ストリームを作成します。このファイル接続を表すために、新しい FileDescriptor オブジェクトが作成されます。
まず、セキュリティ マネージャが存在する場合、 file 引数で表されるパスを引数として checkWrite メソッドが呼び出されます。
ファイルが存在するが通常のファイルではなくディレクトリである場合、存在しないが作成できない場合、またはその他の理由で開くことができない場合は、FileNotFoundException がスローされます。
FileDescriptorの場所:
ファイル記述子クラスのインスタンスは、開いているファイル、開いているソケット、またはバイトの別のソースまたはシンクを表す、基になるマシン固有の構造への不透明なハンドルとして機能します。ファイル記述子の主な実用的な用途は、それを格納する FileInputStream または FileOutputStream を作成することです。
アプリケーションは、独自のファイル記述子を作成しないでください。
このコードは、ファイルを生成するか、例外をスローする必要があります。例外をスローする条件が満たされていないことも確認しました。たとえば、文字列を置き換えていて、demo1 ディレクトリが存在します。これを新しい空のファイルに書き直して実行してください。
それでも同じように動作する場合は、何かを見逃していない限り、これはバグである可能性があります。その場合は、次の行をコードに追加して出力を投稿します。
System.out.println(System.getProperty("java.vendor")+" "+System.getProperty("java.version"));
パスから判断すると、Win 7 を使用していると思いますね。バージョンは?