CSV auslesen > Wort bilden > CSV ausgeben

bsc-monkey

Mitglied
Hey,

ich bin Paul und 23 Jahre alt. Seit einer Weile probiere ich mich jetzt an Java und nun möchte ich gerne eine CSV-Datei auslesen und ein Wort aus einer Zeile bilden und dieses wieder in eine CSV-Datei ausgeben.

Meine Frage ist nun wie ich es hin bekomme, dass die CSV-Datei wieder geschrieben wird.

Könnt ihr mir weiterhelfen?

Ich bedanke mich schon mal im Vorraus für Antworten,

Gruß Paul 🙂
 
Also ich hab die Datei mit BufferedReader eingelesen.
Muss ich dann zu BufferedWriter noch etwas bestimmtes hinzufügen, damit das Wort und die Worte aus der ersten CSV-Datei in Spalten geschrieben werden?

Also zum Beispiel bei HTML schreibe ich das ja so, dass ich einen Quelltext hinschreibe und die Daten dann so, wie in dem Quelltext vorgegeben geschrieben werden.

Doch wie ich das bei CSV mache weiß ich nicht.
 
Eine CSV Datei ist eine ganz normale Textdatei.
Die kannst du mit nem BufferedWriter schreiben.

Das einfachste wäre wohl sowas:
- komplette Datei einlesen
- Datei bearbeiten
- komplette Datei zurückschreiben
 
So also ich habe nun nurnoch genau diesen Fehler im Script. Also erstmal, damit es einmal läuft. Ich muss dann noch einiges verändern, um an mein Ergebnis zu kommen.
So habe ich das nun gemacht:

Java:
file_read = new BufferedReader(new FileReader("word.csv"));
       file_write = new BufferedWriter(new FileWriter("newword.csv"));

       file_write.write();

Was muss ich nun in die letzte Klammer eintragen? Denn dort wird mir der Fehler angezeigt.

PS: anke schonmal für die Hlfe von dir, EikeB 🙂

Ich hab das letzte einfach komplett rausgenommen und nun ist das Programm gestartet. Also bis hierhin scheint es erstmal zu funktionieren. Jetzt muss noch alles richtig eingelesen werden.
 
Zuletzt bearbeitet:
Also irgendwie kann die Datei nicht gelesen werden.
Hier ist mein gesamter Text:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

import java.io.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 13.06.2011
  * @author
  */

public class word extends JFrame {
  // Anfang Attribute
  private JButton jB_auslesen = new JButton();
  private JTextArea jTA_1 = new JTextArea("");
    private JScrollPane jTA_1ScrollPane = new JScrollPane(jTA_1);
  private JButton jB_wiedergeben = new JButton();
  private JTextArea jTA_2 = new JTextArea("");
    private JScrollPane jTA_2ScrollPane = new JScrollPane(jTA_2);
  // Ende Attribute

  public word(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 648;
    int frameHeight = 594;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    jB_auslesen.setBounds(136, 96, 355, 25);
    jB_auslesen.setText("Auslesen");
    jB_auslesen.setMargin(new Insets(2, 2, 2, 2));
    jB_auslesen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_auslesen_ActionPerformed(evt);
      }
    });
    jB_auslesen.setFont(new Font("Dialog", Font.PLAIN, 13));
    cp.add(jB_auslesen);
    jTA_1ScrollPane.setBounds(136, 144, 353, 113);
    jTA_1.setText("");
    jTA_1.setLineWrap(true);
    cp.add(jTA_1ScrollPane);
    jB_wiedergeben.setBounds(136, 288, 355, 25);
    jB_wiedergeben.setText("Wiedergeben");
    jB_wiedergeben.setMargin(new Insets(2, 2, 2, 2));
    jB_wiedergeben.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_wiedergeben_ActionPerformed(evt);
      }
    });
    jB_wiedergeben.setFont(new Font("Dialog", Font.PLAIN, 13));
    cp.add(jB_wiedergeben);
    jTA_2ScrollPane.setBounds(136, 336, 353, 121);
    jTA_2.setText("");
    jTA_2.setLineWrap(true);
    cp.add(jTA_2ScrollPane);
    jTA_2.setFont(new Font("Dialog", Font.PLAIN, 13));
    jTA_1.setFont(new Font("Dialog", Font.PLAIN, 13));
    jTA_2ScrollPane.setViewportView(jTA_2);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden
  public void jB_auslesen_ActionPerformed(ActionEvent evt) {
    BufferedReader datei_lesen;
    BufferedWriter datei_schreiben;
    String zeile;
    String s1; String s2; String s3;

     try {
       datei_lesen = new BufferedReader(new FileReader("word.csv"));
       datei_schreiben = new BufferedWriter(new FileWriter("newword.csv"));


       while ((zeile = datei_lesen.readLine()) != null) {
         jTA_1.append(zeile +'\n');
         s1 = zeile.substring(0,zeile.indexOf(';'));
         s2 = zeile.substring(zeile.indexOf(';')+1, zeile.length());
         s3 = zeile.substring(zeile.indexOf(';')+2, zeile.length());
         datei_schreiben.write("+s1+;");
         datei_schreiben.write("+s2+;");
         datei_schreiben.write("+s3+;");

       }
       datei_lesen.close();
       datei_schreiben.write(+'\n');
       datei_schreiben.close();
       System.out.println("Abgeschlossen" );
     } catch (IOException e) {
             System.out.println("Datei kann nicht gelesen werden");
       }
  }



  public void jB_wiedergeben_ActionPerformed(ActionEvent evt) {
    BufferedReader datei;
    String zeile;

     try {
       datei = new BufferedReader(new FileReader("newword.csv"));
       while ((zeile = datei.readLine()) != null) {
         jTA_2.append(zeile +";");
       }
       datei.close();
     } catch (IOException e) {
             System.out.println("Datei kann nicht aus der geschriebenen Datei gelesen werden");
       }
  }

  // Ende Methoden

  public static void main(String[] args) {
    new word("word");
  }
}

Wenn ich das Programm nun starte und ich möchte die CSV-Datei einlesen, dann kommt die Fehlermeldung, sobald ich auf den Button jB_auslesen klicke. Ebenso funktioniert dann auch der zweite Teil mit jB_wiedergeben nicht.

Weiß jemand Rat?
 
Problem ist, welcher File soll benutzt werden? Dann sind deine .write("+s1;+") auch nicht sonderlich erfolgreich...
Das Schreiben von Datein solltest du dir auch nocheinmal ansehen...
Das Design der Class ist auch naja, man sollte nicht 90% des codes in den Konstrucktor packen...

Aber jeder fängt mal an 🙂
Für das auswählen der Datei würde ich einen FileChooser benutzt... habe das mal in deinen Code eingebaut.

[Java]
package de.volkswagen.aws100p.client.util;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;

import de.volkswagen.aws100p.client.i18n.I18N;

public class Word extends JFrame {
// Anfang Attribute
private JButton jB_auslesen = new JButton();
private JTextArea jTA_1 = new JTextArea("");
private JScrollPane jTA_1ScrollPane = new JScrollPane(jTA_1);
private JButton jB_wiedergeben = new JButton();
private JTextArea jTA_2 = new JTextArea("");
private JScrollPane jTA_2ScrollPane = new JScrollPane(jTA_2);
// Ende Attribute

private static File file;
private final String[] allowedExtension = { ".csv" };

public Word(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 648;
int frameHeight = 594;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten

jB_auslesen.setBounds(136, 96, 355, 25);
jB_auslesen.setText("Auslesen");
jB_auslesen.setMargin(new Insets(2, 2, 2, 2));

jB_auslesen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB_auslesen_ActionPerformed(evt);
}
});
jB_auslesen.setFont(new Font("Dialog", Font.PLAIN, 13));
cp.add(jB_auslesen);
jTA_1ScrollPane.setBounds(136, 144, 353, 113);
jTA_1.setText("");
jTA_1.setLineWrap(true);
cp.add(jTA_1ScrollPane);
jB_wiedergeben.setBounds(136, 288, 355, 25);
jB_wiedergeben.setText("Wiedergeben");
jB_wiedergeben.setMargin(new Insets(2, 2, 2, 2));
jB_wiedergeben.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jB_wiedergeben_ActionPerformed(evt);
}
});
jB_wiedergeben.setFont(new Font("Dialog", Font.PLAIN, 13));
cp.add(jB_wiedergeben);
jTA_2ScrollPane.setBounds(136, 336, 353, 121);
jTA_2.setText("");
jTA_2.setLineWrap(true);
cp.add(jTA_2ScrollPane);
jTA_2.setFont(new Font("Dialog", Font.PLAIN, 13));
jTA_1.setFont(new Font("Dialog", Font.PLAIN, 13));
jTA_2ScrollPane.setViewportView(jTA_2);
// Ende Komponenten

setResizable(false);
setVisible(true);
}

// Anfang Methoden
public void jB_auslesen_ActionPerformed(ActionEvent evt) {
BufferedReader datei_lesen;
BufferedWriter datei_schreiben;
String zeile;
String s1;
String s2;
String s3;

final JFileChooser fileopen = new JFileChooser(file);
fileopen.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileopen.setFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "deinText";
}

@Override
public boolean accept(File f) {
for (String extension : allowedExtension) {
if (f.getName().toLowerCase().endsWith(extension) || f.isDirectory()) {
return true;
}
}
return false;
}
});
int ret = fileopen.showDialog(this, "Csv öffnen");
if (ret == JFileChooser.APPROVE_OPTION) {
file = fileopen.getSelectedFile();
} else { // Immer abbrechen, wenn nicht OK betätigt wurde
JOptionPane.showMessageDialog(this, "Abbruch durch Benutzer", "Fehler", JOptionPane.INFORMATION_MESSAGE);
file = null; // File ist null, für später...
}

try {

if(file == null) // Etwas machen wenn File == null ...
return;

datei_lesen = new BufferedReader(new FileReader(file));
datei_schreiben = new BufferedWriter(new FileWriter("newword.csv"));

while ((zeile = datei_lesen.readLine()) != null) {
jTA_1.append(zeile + '\n');
s1 = zeile.substring(0, zeile.indexOf(';'));
s2 = zeile.substring(zeile.indexOf(';') + 1, zeile.length());
s3 = zeile.substring(zeile.indexOf(';') + 2, zeile.length());
datei_schreiben.write(s1);
datei_schreiben.write(s2);
datei_schreiben.write(s3);
}

datei_lesen.close();
datei_schreiben.write(+'\n');
datei_schreiben.close();
System.out.println("Abgeschlossen");

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void jB_wiedergeben_ActionPerformed(ActionEvent evt) {
BufferedReader datei;
String zeile;

try {
datei = new BufferedReader(new FileReader("newword.csv"));
while ((zeile = datei.readLine()) != null) {
jTA_2.append(zeile + ";");
}
datei.close();
} catch (IOException e) {
System.out.println("Datei kann nicht aus der geschriebenen Datei gelesen werden");
}
}

// Ende Methoden

public static void main(String[] args) {
new Word("Test");
}
}

[/Java]

PS: Class Namen schreibt man den 1. Buchstaben im UpperCase "Word" nicht "word"
 

Zurück
Oben