No.4ベストアンサー
- 回答日時:
回答がないようなので、横から失礼します。
>ただif文でファイルを閉じる判断されていますが、
>そのまま閉じてはいけないのでしょうか?
たとえば、FileWriterを使う場合、こう書きたくなります。
try {
FileWriter fw = new FileWriter("test.txt");
fw.wirte("あいうえお");
}
catch (IOException ex) {
System.out.println("書き込みエラー");
}
finally {
try {
fw.close();
}
catch (IOException ex) {}
}
しかし、コンパイルエラーとなります。
変数fwの宣言がtry節にあるためfinally節のfwはスコープ外になってしまいます。
よって、こう書くことが考えられます。
FileWriter fw;
try {
fw = new FileWriter("test.txt");
fw.wirte("あいうえお");
}
catch (IOException ex) {
System.out.println("書き込みエラー");
}
finally {
try {
fw.close();
}
catch (IOException ex) {}
}
しかし、これでもエラー。
fw = new FileWriter("test.txt");の行で例外が発生した場合、fwが初期化されないまま、finally節を通る可能性があり、警告が出ます。
よって、こう書き直します。
FileWriter fw = null;
try {
fw = new FileWriter("test.txt");
fw.wirte("あいうえお");
}
catch (IOException ex) {
System.out.println("書き込みエラー");
}
finally {
try {
fw.close();
}
catch (IOException ex) {}
}
変数fwをnullで初期化しましたが、しかし、まだ問題が残ります。
やはり、fw = new FileWriter("test.txt");行で例外が発生した場合、fw が nullのままfinally節にいたってしまいます。
今度はNullPointerExceptionが発生してしまいます。
これを回避するためには、
FileWriter fw = null;
try {
fw = new FileWriter("test.txt");
fw.write("あいうえお");
}
catch (IOException ex) {
System.out.println("書き込みエラー");
}
finally {
if (fw != null) {
try {
fw.close();
}
catch (IOException ex) {}
}
}
こう書く必要があるわけです。
また、こういう書き方もできると思います。
try {
FileWriter fw = new FileWriter("test.txt");
try {
fw.write("あいうえお");
}
finally {
fw.close();
}
}
catch (IOException ex) {
System.out.println("書き込みエラー");
}
No.3
- 回答日時:
ファイルの最後に挿入するだけなら、
FileWriterでappendをtrueに指定するとできますヨ。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
/**
* ファイルの最後に
* 文字列を追加する
*/
public class InsertTest {
public static void main(String[] args) {
//ファイル名指定
File file = new File("test.txt");
FileWriter fw = null;
PrintWriter pw = null;
try {
fw = new FileWriter(file, true);//ファイル最後に追加するモード
pw = new PrintWriter(fw);
pw.println("あいうえお");//追加する文字
} catch (IOException e) {
e.printStackTrace();
} finally {
if(pw != null){
pw.close();
}
if(fw != null){
try {
fw.close();
} catch (IOException e){}
}
}
}
}
この回答への補足
ご返答ありがとうございます。
早速試してうまくいきました。
ただif文でファイルを閉じる判断されていますが、
そのまま閉じてはいけないのでしょうか?
No.2
- 回答日時:
同じファイルに書くというのはあまりに乱暴です。
このアルゴリズムでは中身が消えてしますでしょう。2行目と最後に空白行を入れるように変えてみました。ご自身で色々試す事が重要ですよ。
import java.io.*;
class NextHelloEditor02 {
public static void main(String args[]){
try{
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter("test02.txt")));
String line;
int i = 0;
while((line = reader.readLine())!= null){
writer.println(line);
i++;
if(i == 2){ //2行目なら空白を入れる
writer.println(" ");
}
}
writer.println(" ");//最後に空白を入れる。
reader.close();
writer.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
ご返答ありがとうございます。
同じファイルを操作しないものなのですね。
確かに同じファイルにしたら中身が全て消えましたし。
挿入のほうはうまくいきました。
ありがとうございました。
No.1
- 回答日時:
一行ごとに空白行を入れるサンプルです。
参考になりませんか。import java.io.*;
class NextHelloEditor02 {
public static void main(String args[]){
try{
BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter("test01.txt")));
String line;
while((line = reader.readLine())!= null){
writer.println(line);
writer.println(" ");
}
reader.close();
writer.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
この回答への補足
早速の回答ありがとうございます。
読み込みと書き込みのファイルを同じファイルで、
指定した何行目かまたは最後の行だけを操作する事はできないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- その他(プログラミング・Web制作) linuxで列の挿入 1 2023/08/08 22:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでデータに登録する度にID...
-
yyyymmddからyyyy/mm/d...
-
java連結
-
csv出力について
-
Java int sum = 0は必要ですか?
-
ソケットを使ったサーバとクラ...
-
「プログラミング」JAVAの...
-
「テキストファイルをリソース...
-
javaでクッキーを取得したい
-
JAVAで、SSL通信
-
テキストファイルから空白行をよむ
-
JAVAでエラーがでる。
-
equalsの逆
-
javaプログラミングの質問です。
-
今勉強中のjavaで。わからない...
-
BufferedReader.readline()で読...
-
java.lang.NoClassDefFoundErro...
-
C言語のポインターに関する警告
-
VBAで配列の計算
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
yyyymmddからyyyy/mm/d...
-
equalsの逆
-
csv出力について
-
九九を横に表示する。
-
テキストファイルから空白行をよむ
-
Java int sum = 0は必要ですか?
-
[JAVA]エラーが解決できません。
-
javaのfor文が機能してないみた...
-
InputStream.read()でタイムア...
-
Servletでテキストボックスに入...
-
Javaでデータに登録する度にID...
-
Inputstreamについて
-
BufferedReaderでのエラー
-
FileクラスのcanRead/canWrite...
-
java連結
-
Java 読み込んだテキストファイ...
-
Javaの質問です。テキストファ...
-
テキストファイルの任意の文字...
-
Class.forNameでエラーになる
-
テキストファイルにおいて任意...
おすすめ情報