2016-11-13 16 views
2

私はアイテムの情報を保存するために使用するテキストファイルを持っています。変更が行われたときにファイルの最後に空行を削除するには?

public void updateCSV(String replace, int fila, int col) throws IOException { 
    if (replace != null) { 
     File archivoProductos = new File("productos.txt"); 
     // Read existing file 
     CSVReader reader = new CSVReader(new FileReader(archivoProductos), ',', CSVWriter.NO_QUOTE_CHARACTER, 
       CSVWriter.NO_ESCAPE_CHARACTER); 
     List<String[]> csvBody = reader.readAll(); 
     // get CSV row column and replace with by using row and column 
     csvBody.get(fila)[col] = replace; 
     reader.close(); 
     // Write to CSV file which is open 
     CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', CSVWriter.NO_QUOTE_CHARACTER, 
       CSVWriter.NO_ESCAPE_CHARACTER, System.getProperty("line.separator")); 
     writer.writeAll(csvBody); 
     writer.flush(); 
     writer.close(); 

    } 
} 

問題は、そこに追加されていることを1:

10325,Test1,Producto del Hogar,12,17 
10425,Test2,Videojuegos,11,17 
12345,Test3,Producto del Hogar,56,17.0 

私は希望のアイテムの1列を変更するライブラリをopencsv使用しています、私はこのコードを使用していますテキストファイルの最後の空白行。

line1 10325,Test99,Producto del Hogar,12,17 
line3 10425,Test2,Videojuegos,11,17 
line2 12345,Test3,Producto del Hogar,56,17.0 
line4 

最後に空白行が追加されないようにするにはどうすればよいですか? csvBodyの

を追加しましたprintlnのは、それが出て、それを書き込む前に

[10325, Test99, Producto del Hogar, 12, 17] 
[10425, Test2, Videojuegos, 11, 17] 
[12345, Test3, Producto del Hogar, 56, 17.0] 

これまでにしようとしました:

空の行を追加しませんが、私の3本の既存のラインは今ちょうど1で書かれていますライン。

CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', 
        CSVWriter.NO_QUOTE_CHARACTER, 
        CSVWriter.NO_ESCAPE_CHARACTER,""); 
+0

csvBodyはあなたがそれを書き出す前にどのように見えるのですか?あなたはprintステートメントを使って見ることができます。 –

+0

これで試すことができますか? CSVWriterライター=新しいCSVWriter(新しいFileWriter(archivoProductos)、 '、'、CSVWriter.NO_QUOTE_CHARACTER、 CSVWriter.NO_ESCAPE_CHARACTER); – developer

+0

私は空白の行を削除し、別の行を変更したい場合は、空の行が戻ってくるcsvBodyに空の行がないことがわかるように、投稿を更新しました。 @melgart –

答えて

0

がある場合、おそらくあなたは...あなたが最後の...

はSystem.getProperty( "line.separator")

を書いていないので、テストを挿入したいと思いますそれ以上のデータはありません。または、これはより速く実行するかもしれません、ファイルを書き込む/保存する前に最後の区切り文字をトリムするだけです。

0

問題は、あなたの改行文字なので、以下に示すように代わりSystem.getProperty("line.separator")、あなたはCSVWriterコンストラクタ「」として改行(最後の引数)を送信する必要がありますので、見て

//Pass Empty string as line feed at the end 
CSVWriter writer = new CSVWriter(new FileWriter(archivoProductos), ',', 
        CSVWriter.NO_QUOTE_CHARACTER, 
        CSVWriter.NO_ESCAPE_CHARACTER,""); 
+0

私を助けてくれてありがとう!残念なことに私の3つの既存の行は今1行で書かれています。@javaguy –

+0

すみません、それをチェックさせてください – developer

0

オーケー私はSystem.getProperty( "line.separator")を送信しているのですか?その答えは、あなたが使っているシステムが改行 "\ n"以外の行区切りを使っているということです。 。

私が疑っているのは、使用しているエディタが異なる改行をうまく扱っていないことです。 * Nixシステム(Linux、Unix、BSD、Macなど)を使用している場合は、実際の行数を取得するために "wc -l"を実行し、それが3または4で戻ってくるかどうかを確認してください。そうでなければ、別のエディタを試してください

もう1つの可能性は、入力ファイルのヘキサダンプを行い、追加の改行があるかどうかを確認することです。それが事実である可能性があり、読者はそれを余分な空のレコードとして選んでおり、CSVWriterはそれを忠実に書いています。そうであれば、読み込まれた後にリストをループし、書き込む前に空のものを取り除くロジックを書く必要があります。私はこれが本物の犯人だと思う。

関連する問題