FileWriter / String

Tis

Mitglied
Moin ,

Also ich hab folgendes problem:

Ich lese aus eine Exceldatei zellen aus und speicher sie in ein String [] db.
Dann erstelle ich ein leer string und addier diese da ich sie in eine Textdatei speichern
muss.
Ich erstelle ein FileWriter und versuche dann den leerstring mit den addierten Strings
in eine Textdatei"test.txt" zu schreiben , nur leider steht immer der letzte objekt aus dem string [] db drin sonst nichts.
Obwohl in der kontroll ausgabe der zusammengefügte leerstring steht.





Java:
int cells = row.getPhysicalNumberOfCells();
			for(int j = 0;j<cells;j++){
				
			
			HSSFCell keycell = row.getCell(j);
			
			String value = " " +keycell.getStringCellValue();
			String [] db = new String [cells];
			
			db[j]= " " +value+ " ";
			

	//String te leerstring um strings aus db zu addieren

				String ls = "";
				File file = new File("test.txt");
				FileWriter fw = new FileWriter(file);
				for(int k =0 ;k<db.length;k++){
				String zte = ls + db[k];

				
				

			
					
				//testausgabe			System.out.print(zte);
				fw.write(zte);
			//	fw.flush();
				fw.close();
							
			}
				
				}

Gruß tis
 
Zuletzt bearbeitet:
Hallo,

mal von der grauenhaften Formatierung des Quelltextes und den Namen der Variablen abgesehen:

Du öffnest bei jeder einzelnen Zelle die Datei "test.txt" und überschreibst diese mit dem Wert der aktuellen Zelle. Dies ist extrem ineffizient und ausserdem für dein Ziel auch falsch.

Ich würde dir folgendes empfehlen (ungetestet):
Java:
int numCells = row.getPhysicalNumberOfCells();
StringBuilder temp = new StringBuilder(row.getCell(0).getStringCellValue());

for(int aktCell = 1; aktCell < numCells; aktCell++) {
  temp.append(" " + row.getCell(aktCell).getStringCellValue());
}

File outFile = new File("test.txt");
FileWriter fw = null;
try {
  fw = new FileWriter(outFile);
  fw.write(temp.toString());
  fw.flush();
  fw.close();
} catch (IOException e) {
  e.printStackTrace();
} finally {
  if(fw != null) {
    fw.close();
  }
}

Hier wird jedoch der gesamte Inhalt der Exceltabelle im Arbeitsspeicher zu einem String kopiert, was je nach Größe der Tabelle sehr viel Arbeitsspeicher brauchen kann.
Daher (nur Stichpunktartig) ein weiterer Lösungsvorschlag:

- FileWriter auf die Datei öffnen
- Alle Zellen durchgehen
--- Inhalt der Zelle schreiben
- Datei schließen

Gruß
BK
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Tis
moin,

abgesehen von deine pinglichkeit ;D ..

danke aufjedenfall aber hast du vll ein schimmer wie ich die formatierung der text ändern kann? UTF8 usw?

Gruß tis


und etwas fehlt im code bei dir ein klammer oder sonst was ^^
 
Zuletzt bearbeitet:
Ich kann dein teil gar nicht bei mir einbinden -.- und ich hab das gefühl das bei mir diese ganzen row cells algorithmen falsch sind

Java:
package mein;

import org.apache.*;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.model.Workbook;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import java.io.*;


public class OpenExcel {
	public static void main (String[]args){
		
		
		try{
		
		//Open Excel Spreadsheet
			
			POIFSFileSystem fs = new POIFSFileSystem (new FileInputStream("bsp.xls"));
			HSSFWorkbook wb = new HSSFWorkbook(fs);
			
			int lastCellNum = 0;

			
			// Open first sheet

			HSSFSheet sheet = wb.getSheetAt(0);
			int rows = sheet.getPhysicalNumberOfRows();
			for (int i = 0;i<rows;i++){
				
		
			HSSFRow row = sheet.getRow(i);
			if (row == null){
				continue;
			}
			
			
			
			//Rows
	
			
			//Enthaltende zellen definieren
			int cells = row.getLastCellNum();
			
		
			
			for(int j = 0;j<50;j++){
				
				
				HSSFCell keycell = row.getCell(j);
			
			String value = " " +keycell.getStringCellValue();
			String [] db = new String [50];
			
			db[j]= " " +value;
					
		
				
				String te = "";
				File file = new File("test.txt");
				FileWriter fw = new FileWriter(file);
				for(int k =0 ;k<db.length;k++){
				String zte = te + db[k];
				
				

				//while(db.length <cells){
					
				
				System.out.print("h");
				fw.write(zte);
				fw.close();
							
			}
				
			//	}
			
	}
			

}
				
		      

		}
	    catch (Exception e) {
	      e.printStackTrace();
	    }
	}
}
 
Zurück