Leggere FIle csv e copiare dati in un nuovo file.

di il
6 risposte

Leggere FIle csv e copiare dati in un nuovo file.

Ciao a tutti,
sto cercando di creare un programma che legga dei dati da un file csv e li copi in un nuovo file sempre csv.
Per ora utilizzando la Classe BufferedReader sono riuscito a fare leggere il file e stamparlo in console.
Ecco il programma:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class InfoFile {

	public static void main(String[] args) throws FileNotFoundException, IOException {
		BufferedReader reader = new BufferedReader(new FileReader("file.csv"));
		String line = reader.readLine();
		while(line != null) {
			System.out.println(line);
			line = reader.readLine();
		}
	}
}
Ora volevo utilizzare la classe BufferedWriter per copiare i dati letti e stamparli su un file csv.
Potete aiutarmi, non idea di come fare

6 Risposte

  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    Se non devi farci elaborazioni ed è sufficiente fare una copia byte-per-byte, BufferedReader/BufferedWriter non servono.

    Il "vecchio" modo è usare FileInputStream/FileOutputStream e copiare a blocchi di tot byte. Si può abbreviare con l'uso dei channel.

    Altrimenti da Java 7 la nuova classe java.nio.file.Files ha dei comodi metodi copy.
    In alternativa ancora: usare librerie esterne es. la Apache Commons IO
  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    andbin ha scritto:


    Se non devi farci elaborazioni ed è sufficiente fare una copia byte-per-byte, BufferedReader/BufferedWriter non servono.
    Per ora non devo fare elaborazioni ma fare solo una copia. Poi l'idea è quella di copiare solo determinate colonne del file per poi copiarle nel nuovo file.
    Il "vecchio" modo è usare FileInputStream/FileOutputStream e copiare a blocchi di tot byte. Si può abbreviare con l'uso dei channel

    Altrimenti da Java 7 la nuova classe java.nio.file.Files ha dei comodi metodi copy.
    In alternativa ancora: usare librerie esterne es. la Apache Commons IO
    Ok, grazie mille per la risposta rapida, proverò sia con i FileInputStream/FileOutputStream sia con la classe
    grazie mille ancora
  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    .
  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    Ciao,
    Sono riuscito a creare il programma per copiare il contenuto del file csv in un nuovo file.
    Ora volevo chiedervi se c'è un modo per copiare il file in una tabella MySql
    Gazie ancora per il prezioso aiuto
  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    Jack11093 ha scritto:


    Ora volevo chiedervi se c'è un modo per copiare il file in una tabella MySql
    Beh, in tal caso innanzitutto il file va "elaborato", cioè devi leggere i record ed estrarre le singole colonne che ti interessano. Puoi provare ad usare la Apache Commons CSV. Non la uso/conosco personalmente ma c'è una breve user guide. Se avessi dubbi, comunque chiedi.

    Poi per ciascun record devi fare una INSERT nella tabella su MySQL. In Java la API basilare per l'accesso ai database è JDBC. Che richiede un po' di nozioni per poterla usare. Dipende da che cosa sai o quanto tempo intendi spendere per affrontare JDBC.
  • Re: Leggere FIle csv e copiare dati in un nuovo file.

    andbin ha scritto:


    Jack11093 ha scritto:


    Ora volevo chiedervi se c'è un modo per copiare il file in una tabella MySql
    Beh, in tal caso innanzitutto il file va "elaborato", cioè devi leggere i record ed estrarre le singole colonne che ti interessano. Puoi provare ad usare la Apache Commons CSV. Non la uso/conosco personalmente ma c'è una breve user guide. Se avessi dubbi, comunque chiedi.

    Poi per ciascun record devi fare una INSERT nella tabella su MySQL. In Java la API basilare per l'accesso ai database è JDBC. Che richiede un po' di nozioni per poterla usare. Dipende da che cosa sai o quanto tempo intendi spendere per affrontare JDBC.
    Ciao ho iniziato a buttare giu un'dea del programma se ti va mi dici se puo avere un senso o se è completamente errato?
    
    import java.io.BufferedReader;
    import java.sql.PreparedStatement;
    import java.sql.DriverManager;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.io.FileReader;
    import java.io.IOException;
    
    
    public class ReadWrite {
    	
    	public static void main(String[] args) throws IOException {
    		
    		//leggo il file
    		FileReader f;
    		f = new FileReader("/home/bombe/Allot/Dati/sample_mx-sg-01_10.40.26.100_10.41.5.215_000037998_20180119101000_UDR_V1.csv");
    		//memorizzo i dati del file
    		BufferedReader b;
    		b = new BufferedReader(f);
    		
    		String connectionString="jdbc:mysql:/localhost/datiAllot?user=root&password=pass";
    		try {
    		    Class.forName("com.mysql.jdbc.Driver");
    			} catch (ClassNotFoundException e) {
    		    e.printStackTrace();
    			}
    		
    		Connection connection = null;
    		
    		String rigaCorrente = b.readLine();
    		while (rigaCorrente != null) {
    			String [] campiStringa = rigaCorrente.split(";");
    			
    			try {
    				connection = DriverManager.getConnection(connectionString);
    				PreparedStatement prepared = connection.prepareStatement("INSERT INTO UserDataRecords (SubscriberID) VALUES (?)");
    				prepared.setCharacterStream(1, b);
    				
    				prepared.executeUpdate();
    				
    			}catch (SQLException e) {
    				e.printStackTrace();
    			}catch (Exception e) {
    				System.out.println(e.getMessage());
    			}finally {
    				try {
    					if (connection != null)
    						connection.close();
    				}catch (SQLException e) {
    					
    				}
    			}
    		}
    		
    	}
    }
    
    L'idea è quella di leggere stringa per stringa il file e poi andare a copiare quello letto nelle varie colonne della tabella creata su mysql.
Devi accedere o registrarti per scrivere nel forum
6 risposte