CSV2JS-Array Konverter

amn.ssy

Erfahrenes Mitglied
Hallo,

mit meinen paar Grundlagen und einer Beispielapp (beides kam schon mehr als 2 Jahre nicht mehr zum Einsatz) habe ich mich daran gemacht mir einen Konverter zu basteln, der eine CSV-Datei in ein JS-Array wandelt und als solches speichert. Die Unterschiede sind ja nicht so groß!
Soweit funktioniert alles wie es soll :), mit 2 kleinen Ausnahmen, bei denen ich hoffe, daß mir jemand helfen kann:

a) nach der letzten eingelesenen Zeile darf kein Komma mehr gesetzt werden
b) beim Speichern soll der Name der geladenen CSV-Datei und die Erweiterung *.js als Vorschlagswert bereitstehen.

Der bisherige Code sieht so aus:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;

public class csv2js extends JFrame implements ActionListener
{
  public static void main(String[] args)
  {
    new csv2js();
  }

  JTextField tfName;
  JTextArea taInhalt;
  JButton laden, speichern;

  public csv2js()
  {
    super("csv2js-Array");
    tfName = new JTextField("", 50);

    taInhalt = new JTextArea(10, 20);
    JScrollPane sp = new JScrollPane(taInhalt);

    laden = new JButton("Laden");
    speichern = new JButton("Speichern");
    laden.addActionListener(this);
    speichern.addActionListener(this);

    JPanel sued = new JPanel();
    sued.setLayout(new FlowLayout(FlowLayout.CENTER));
    sued.add(laden);
    sued.add(speichern);

    getContentPane().add(tfName, BorderLayout.NORTH);
    getContentPane().add(sp);
    getContentPane().add(sued, BorderLayout.SOUTH);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
  }

  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource()==laden)
    {
      dateiLaden();
    }
    if(e.getSource()==speichern)
    {
      dateiSpeichern();
    }
  }

  public void dateiLaden()
  {
    try
    {
      JFileChooser fc = new JFileChooser();
      fc.setCurrentDirectory(new File("."));

      fc.setFileFilter(new MyFilter());
      fc.setFileFilter(new MyFilter2());

      int erg = fc.showOpenDialog(this);

      if(erg == JFileChooser.APPROVE_OPTION){
        String filename = fc.getSelectedFile().getAbsolutePath();
        tfName.setText(filename);
        BufferedReader br = new BufferedReader(new FileReader(new File(tfName.getText().trim())));
        String s="";
        taInhalt.setText("var werte = ["+"\n");
        while( (s=br.readLine()) != null)
        {
        	taInhalt.append('"'+s+'"'+","+"\n");
        }
          taInhalt.append("];"+"\n");
        br.close();
      }
    }
    catch(FileNotFoundException fe)
    {
      taInhalt.setText("Fehler beim Öffnen der Datei");
      JOptionPane.showMessageDialog(this, "Fehler beim Öffnen der Datei");
    }
    catch(IOException ioe)
    {
      taInhalt.setText("Fehler beim Lesen der Datei");
      JOptionPane.showMessageDialog(this, "Fehler beim Lesen der Datei");
    }
  }

  public void dateiSpeichern()
  {
    try
    {
      JFileChooser fc = new JFileChooser();
      fc.setCurrentDirectory(new File("."));
      int erg = fc.showSaveDialog(this);

      if(erg == JFileChooser.APPROVE_OPTION)
      {
        String filename = fc.getSelectedFile().getAbsolutePath();
        tfName.setText(filename);

        File f = new File(tfName.getText().trim());
        System.out.println(f.exists());
        BufferedWriter bw = new BufferedWriter(new FileWriter(tfName.getText().trim()));

        bw.write(taInhalt.getText());
        bw.close();
      }
    }
    catch(IOException ioe)
    {
      taInhalt.setText("Fehler beim Speichern der Datei");
      JOptionPane.showMessageDialog(this, "Fehler beim Speichern der Datei");
    }

  }

  class MyFilter extends FileFilter
  {
    public boolean accept(File f) {
      boolean erg=false;
      erg = f.getName().toLowerCase().endsWith(".js") || f.isDirectory();
      return erg;
    }
    public String getDescription() {
      return "JS-Dateien";
    }

  }

  class MyFilter2 extends FileFilter
  {
    public boolean accept(File f) {
      boolean erg=false;
      erg = f.getName().toLowerCase().endsWith(".csv") || f.isDirectory();
      return erg;
    }
    public String getDescription() {
      return "CSV-Dateien";
    }

  }

}

Ich freue mich wenn ich an der Stelle die Kuh vom Eis bekomme

Nach ne Frage in diesem Zusammenhang: läßt sich so etwas auch als Applet machen?

LG

opiWahn
 
Zuletzt bearbeitet:
Also für b) solltest du einen Filefilter schreiben bzw. dem FileChooser einfach die Datei "*.js" als argument übergeben. Den FileChooser stört es nicht, wenn es die Datei nicht gibt, aber er wird in das Feld für den Dateinamen die von dir gewählte Datei "hineinschreiben".
Zur Umsetzbarkeit: Eigentlich hast du von einem Applet aus keine Schreibrechte auf die lokale Festplatte. Probier es doch mit JNLP - da kannst du auch eine Java-Version verlangen, die vorhanden sein muss. Allerdings kann ich dir auch nicht garantieren, dass das erlaubt ist - vielleicht weiß ja noch jemand genaueres.
 

Neue Beiträge

Zurück