Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    1

    Compilazione e apertura da servlet Java di documento in formato .csv

    Ciao a tutti.
    Sono nuovo e spero perdonerete qualche mio strafalcione se doveste rilevarne.
    Ho la necessità di creare "al volo" un documento in formato .csv partendo dal resultSet di una select Oracle: non voglio creare un file fisico, ma aprire il documento risultante da browser.
    Il risultato della select, dato che lo devo utilizzare anche per altre operazioni, per comodità l'ho trasferito su un vettore di Hashtable: da questo parto per aprire il documento .csv.
    Di seguito il codice che ho scritto:

    codice:
    
    private void scriviFileDownload(HttpServletResponse res,HttpSession session, Vector listaRichieste) throws Exception {	
    
    // creo un nome univoco per il file che andrò a generare
    	   Calendar oggi = Calendar.getInstance();	
    	   String nomeFile = "dwn" + 
    		                 new Integer(oggi.get(Calendar.YEAR)).toString() + 
    	                     new Integer(oggi.get(Calendar.MONTH)).toString() + 
    	                     new Integer(oggi.get(Calendar.DAY_OF_MONTH)).toString() +
    	              	     new Integer(oggi.get(Calendar.HOUR_OF_DAY)).toString() + 
    	              	     new Integer(oggi.get(Calendar.MINUTE)).toString() + 
    	              	     new Integer(oggi.get(Calendar.SECOND)).toString();
    
    // configuro response per il browser
    	 res.setContentType("text/x-comma-separated-values");
    	 res.setHeader("Content-Disposition","attachment;filename=" + nomeFile + ".csv");
    //	 
    		try 
    		{		
    		    ServletOutputStream sos = res.getOutputStream();
    		    StringBuffer sb = new StringBuffer();
    
    // Riga di intestazione del file	
    		    sb.append("CODICE USERID");
    		    sb.append(',');		    
    			sb.append("CODICE ASSEGNAZIONE");
    		    sb.append(',');		 
    			sb.append("COGNOME"); 
    		    sb.append(',');		    
    			sb.append("NOME"); 
    		    sb.append(',');		    
    			sb.append("AMMINISTRAZIONE"); 
    		    sb.append(',');		    
    			sb.append("UFFICIO"); 
    		    sb.append(',');		    
    			sb.append("EMAIL USER"); 
    		    sb.append(',');		   
    			sb.append("DATA ASSEGNAZIONE"); 
    		    sb.append(',');		     
    			sb.append("DATA SCADENZA");  		   
    		    sb.append('\n');
    
    // Ciclo per la scrittura dei dati - estraggo i dati dalle Hash contenute nel Vector e li separo 
    // con una virgola. Alla fine di ogni riga inserisco un carriage return
    		    
                Enumeration e = (Enumeration) listaRichieste.elements();		    
    		    if (e.hasMoreElements()) {
    		    	while (e.hasMoreElements()) {
    		    		Hashtable ht = (Hashtable) e.nextElement();		    						     
    					sb.append(ht.get("userid"));
    				    sb.append(',');		    
    					sb.append(ht.get("c_assegn"));
    				    sb.append(',');				     
    					sb.append(ht.get("cognome"));
    				    sb.append(',');				     
    					sb.append(ht.get("nome"));
    				    sb.append(',');				     
    					sb.append(ht.get("amministrazione"));
    				    sb.append(',');				     
    					sb.append(ht.get("ufficio"));
    				    sb.append(',');				     
    					sb.append(ht.get("email_user"));
    				    sb.append(',');				     
    					sb.append(ht.get("dt_assegn"));
    				    sb.append(',');				     
    					sb.append(ht.get("dt_scad")); 		   
    				    sb.append('\n');     		    		
    		    	}
    		    } else {
    			    sb.append("NESSUNA RICORRENZA ESTRATTA PER IL RANGE DI RICERCA INDICATO");		    	
    		    }	 		
    		InputStream in =  new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));	 
    		byte[] outputByte = new byte[4096];
    
    //copio il contenuto binario su output stream
    
    			while(in.read(outputByte, 0, 4096) != -1)
    			{
    				sos.write(outputByte, 0, 4096);
    			}
    			in.close();
    			sos.flush();
    			sos.close();
    		  }  catch (Exception e) {
    			    throw e;
    		  }	 
    }

    Tutto sembrerebbe funzionare, ma in realtà il file risultante contiene stranezze rispetto a ciò che mi aspetto: record doppi, talvolta incompleti ecc.

    C'è qualcosa di sbagliato nel mio codice?

    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ci sono alcune considerazioni.

    1) Prendi visione del Regolamento interno

    2) Java ha un forum dedicato


    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.