Input/Output .csv Datei wird beim Lesen bearbeitet?

Gossi

Bekanntes Mitglied
Kann mir einer erklären, warum mein Programm aus einer .csv-Datei:
Code:
12013200191;101576623;35
12013200217;101576623;35
12013200300;101576623;35
12013200437;101576623;35

Eine Datei macht, die genauso aussieht wie die .xls Datei dazu ;(

Hier der Code, der die Datei anfasst

Java:
            if(table.getName().toLowerCase().contains(".xls")) {
                FileInputStream fIn = new FileInputStream(table);
                POIFSFileSystem fileSystem = new POIFSFileSystem(fIn);
                HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
                HSSFSheet worksheet = workbook.getSheetAt(0);
                @SuppressWarnings("unchecked")
                Iterator<HSSFRow> rows = worksheet.rowIterator();
                i = 0;
                while(rows.hasNext()) {
                    if(i != 0) {
                        HSSFRow row = rows.next();
                        Objects ob = new Objects();
                        Iterator<Object> obList = row.cellIterator();
                        List<Object> objectList = new ArrayList<Object>();
                        while(obList.hasNext()) {
                            Object obj = obList.next();
                            objectList.add(obj);
                        }
                        ob.setObjectList(objectList);
                        objectListTable.add(ob);
                    } else {
                        HSSFRow row = rows.next();
                    }
                    i++;
                }
            } else if(table.getName().toLowerCase().contains(".csv")) {
                FileReader in = new FileReader(table);
                char[] cbuff = new char[5000000];
                in.read(cbuff);
                Objects ob = new Objects();
                List<Object> objList = new ArrayList<Object>();
                String aktuell = "";
                for (char c : cbuff) {
                    if(c == 10 || c == 13) {
                        if(aktuell.length() > 20) {
                            objList.add(aktuell.substring(0, 11));
                            objList.add(aktuell.substring(11, 20));
                            objList.add(aktuell.substring(20));
                            ob.setObjectList(objList);
                            objectListTable.add(ob);
                        }
                        ob = new Objects();
                        objList = new ArrayList<Object>();
                        aktuell = "";
                    } else if(c >= 48 && c <= 57) {
                        aktuell += c;
                    }
                }
            }
 
Verstehe die frage nicht so ganz...

Kann mir einer erklären, warum mein Programm aus einer .csv-Datei:
...
Eine Datei macht, die genauso aussieht wie die .xls Datei dazu
Du zeigst den Code nicht der die datei so aussehen lässt wie eine Excel Datei 😉
 
Du zeigst den Code nicht der die datei so aussehen lässt wie eine Excel Datei 😉

Richtig, weil es ihn nicht gibt, das is ja das Problem welches ich nicht verstehe.....

Hier mal bissl mehr Code:

Der Methodenaufruf:
Java:
   public void showDiff() {
        //Setzen der benoetigten Variablen
        String jj = comboJj.getSelectedItem().toString();
        if (jj.length() == 1) {
            jj = "0" + jj;
        }
        String mm = "" + (comboMm.getSelectedIndex() + 1);
        if (mm.length() == 1) {
            mm = "0" + mm;
        }
        String jjmm = jj + mm;
        String mandantbereich = (comboMandantBereich.getSelectedIndex()) + "";
        String mandantnummer = (comboMandant.getSelectedIndex() + 1) + "";
        File inOut = new File("");
        //SQL-Statement
        String sql = "select * from something";
        try {
            List<Objects> errList;
            //Wenn eine Datei ausgewaehlt wurde
            if (!textDatPath.getText().equals("")) {
                //inOut setzen
                inOut = new File(textDatPath.getText().replace("\\\\", "/"));
                errList = Abgleich.compareTableAndDb(Abgleich.getConnection(jjmm).executeQuery(sql), inOut);
            } else {
                //Eine Excel-Tabelle anlegen mit allen Werten aus der DB
                inOut = new File("apoi-test.xls");
                errList = Abgleich.compareTableAndDb(Abgleich.getConnectionCreateTable(sql, inOut, jjmm).executeQuery(sql), inOut);
            }

            boolean isFirst = true;
            //Fehlertabelle neu aufbauen
            for (int i = ((DefaultTableModel) tableFehler.getModel()).getRowCount() - 1; i >= 0; i--) {
                ((DefaultTableModel) tableFehler.getModel()).removeRow(i);
            }
            for (Objects objects : errList) {
                if (isFirst) {
                    textDatensaetze.setText(objects.getObjectList().get(0) + "");
                    isFirst = false;
                } else {
                    ((DefaultTableModel) tableFehler.getModel()).addRow(objects.getObjectList().toArray());
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(EOAbgleichView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Die Aufgerufene Methode:
Java:
    public static Statement getConnection(String jjmm) throws SQLException {
        try {
            Connection con = DriverManager.getConnection("xxxxxxxx", "xxxxxx", "xxxxxxx");
            Statement stm = con.createStatement();
            return stm;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return DriverManager.getConnection("xxxxxxxx", "xxxxxx", "xxxxxxx").createStatement();

    }


@SuppressWarnings({"unchecked", "CallToThreadDumpStack"})
    public static List<Objects> compareTableAndDb(ResultSet rs, File table) {
        int errorCount = 0;
        List<Objects> errList = new ArrayList<Objects>();
        try {
            List<Objects> objectListTable = new ArrayList<Objects>();
            int i = 0;
            if(table.getName().toLowerCase().contains(".xls")) {
                FileInputStream fIn = new FileInputStream(table);
                POIFSFileSystem fileSystem = new POIFSFileSystem(fIn);
                HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
                HSSFSheet worksheet = workbook.getSheetAt(0);
                @SuppressWarnings("unchecked")
                Iterator<HSSFRow> rows = worksheet.rowIterator();
                i = 0;
                while(rows.hasNext()) {
                    if(i != 0) {
                        HSSFRow row = rows.next();
                        Objects ob = new Objects();
                        Iterator<Object> obList = row.cellIterator();
                        List<Object> objectList = new ArrayList<Object>();
                        while(obList.hasNext()) {
                            Object obj = obList.next();
                            objectList.add(obj);
                        }
                        ob.setObjectList(objectList);
                        objectListTable.add(ob);
                    } else {
                        HSSFRow row = rows.next();
                    }
                    i++;
                }
            } else if(table.getName().toLowerCase().contains(".csv")) {
                FileReader in = new FileReader(table);
                char[] cbuff = new char[5000000];
                in.read(cbuff);
                Objects ob = new Objects();
                List<Object> objList = new ArrayList<Object>();
                String aktuell = "";
                for (char c : cbuff) {
                    if(c == 10 || c == 13) {
                        if(aktuell.length() > 20) {
                            objList.add(aktuell.substring(0, 11));
                            objList.add(aktuell.substring(11, 20));
                            objList.add(aktuell.substring(20));
                            ob.setObjectList(objList);
                            objectListTable.add(ob);
                        }
                        ob = new Objects();
                        objList = new ArrayList<Object>();
                        aktuell = "";
                    } else if(c >= 48 && c <= 57) {
                        aktuell += c;
                    }
                }
            } else {
                System.out.println("Fehler beim Datenimport");
                Objects ob = new Objects();
                List<Object> objList = new ArrayList<Object>();
                objList.add("Fehler beim Datenimport");
                objList.add("Kein Unterstueztes Dateiformat");
                objList.add("Bitte nur Datein mit den folgenden Endungen benutzen");
                objList.add(".csv und .xls");
                ob.setObjectList(objList);
                errList.add(ob);
            }
            i = 1;
            ResultSetMetaData meta = rs.getMetaData();
            int columns = meta.getColumnCount();
            List<Objects> objectListDb = new ArrayList<Objects>();
            while(rs.next()) {
                Objects ob = new Objects();
                List<Object> obj = new ArrayList<Object>();
                for (int j = 1; j < columns; j++) {
                    Object cellBereich;
                    cellBereich = rs.getString(j);
                    obj.add(cellBereich);
                }
                ob.setObjectList(obj);
                objectListDb.add(ob);
            }
            int count = 0;
            if(objectListDb.size() == objectListTable.size()) {
                count = objectListDb.size();
            } else if(objectListDb.size() > objectListTable.size()) {
                System.out.println("Die Datenbank beinhaltet mehr Zeilen");
                count = objectListTable.size();
            } else if(objectListDb.size() < objectListTable.size()) {
                System.out.println("Die Tabelle beinhaltet mehr Zeilen");
                count = objectListDb.size();
            }
            Objects ob = new Objects();
            List<Object> objList = new ArrayList<Object>();
            objList.add(count);
            ob.setObjectList(objList);
            errList.add(ob);
            ob = new Objects();
            objList = new ArrayList<Object>();
            for (int j = 0; j < count; j++) {
                for (int x = 0; x < objectListDb.get(j).getObjectList().size(); x++) {
                    Object obDb = objectListDb.get(j).getObjectList().get(x);
                    Object obTable = objectListTable.get(j).getObjectList().get(x);
                    if((obDb == null && obTable == null) || (obDb.toString().equals(obTable.toString()))) {
                        // Todo: nothing
                    } else {
                        ob =  new Objects();
                        objList = new ArrayList<Object>();
                        objList.add(j);
                        objList.add(x+1);
                        if (obDb == null) {
                            objList.add("null");
                        } else {
                            objList.add(obDb);
                        }
                        if (obTable == null) {
                            objList.add("null");
                        } else {
                            objList.add(obTable);
                        }
                        ob.setObjectList(objList);
                        errList.add(ob);
                        errorCount++;
                        System.out.println("Ungleiches Element an Position " + j + ":" + x + " DB: null | Tabelle: " + obTable);
                    }
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return errList;
    }

Erledigt, schon blöd wenn man .getConnectionCreateTable aufruft, obwohl man nur .getConnection haben will -.-
 
Zuletzt bearbeitet:

Zurück
Oben