2013-09-01 18 views
21

Si prega di dare un'occhiata al seguente codice dilettura e scrittura di testo in formato ANSI

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author 
*/ 
import java.io.*; 


public class CSVConverter 
{ 
    private File csvFile; 
    private BufferedReader reader; 
    private StringBuffer strBuffer; 
    private BufferedWriter writer; 
    int startNumber = 0; 
    private String strString[]; 

    public CSVConverter(String location, int startNumber) 
    { 
     csvFile = new File(location); 
     strBuffer = new StringBuffer(""); 
     this.startNumber = startNumber; 


     //Read 
     try 
     { 
     reader = new BufferedReader(new FileReader(csvFile)); 
     String line = ""; 

     while((line=reader.readLine())!=null) 
     { 
      String[] array = line.split(","); 

      String inputQuery = "insertQuery["+startNumber+"] = \"insert into WordList_Table ('Engl','Port','EnglishH','PortugueseH','Numbe','NumberOf','NumberOfTime','NumberOfTimesPor')values('"+array[0]+"','"+array[2]+"','"+array[1]+"','"+array[3]+"',0,0,0,0)\""; 

      strBuffer.append(inputQuery+";"+"\r\n"); 
      startNumber++; 

     } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     System.out.println(strBuffer.toString()); 

     //Write 
     try 
     { 
      File file = new File("C:/Users/list.txt"); 
      FileWriter filewrite = new FileWriter(file); 

      if(!file.exists()) 
      { 
       file.createNewFile(); 
      } 


      writer = new BufferedWriter(filewrite); 


      writer.write(strBuffer.toString()); 
      writer.flush(); 
      writer.close(); 

     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    public static void main(String[]args) 
    { 
     new CSVConverter("C:/Users/list.csv",90); 
    } 
} 

Sto cercando di leggere un file CSV, modificare il testo nel codice e scrivere di nuovo a un file .txt. Il mio problema è che ho parole in portoghese, quindi il file dovrebbe essere letto e scritto usando il formato ANSI. Al momento alcune parole portoghesi sono sostituite con simboli nel file di output.

Come posso leggere e scrivere dati di testo in un file in formato ANSI in Java?

+1

Elenco farmacias = Files.readAllLines (Paths.get ("c: \\ tmp \\ Farmacias.txt"), Charset.forName ("Cp1252")); –

+0

Non sono d'accordo> La codifica Java corretta per Windows ANSI è Cp1252 ANSI è un trucco di Microsoft e può essere impostata in una codifica variabile. Potrebbe anche essere GBK, Shift_JIS e così via, a seconda dell'impostazione di Windows. – TKJohn

risposta

41

Per leggere un file di testo con una codifica specifica è possibile utilizzare uno FileInputStream in combinazione con uno InputStreamReader. La codifica Java corretta per Windows ANSI è Cp1252.

reader = new BufferedReader(new InputStreamReader(new FileInputStream(csvFile), "Cp1252")); 

Per scrivere un file di testo con un carattere specifico codifica è possibile utilizzare un FileOutputStream insieme ad un OutputStreamWriter.

writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "Cp1252")); 

Le classi InputStreamReader e OutputStreamWriter traducono fra flussi di byte orientato e testo con una codifica carattere specifico.

+1

Perché non è elencato Cp1252 [qui] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html)? –

+3

Forse questa lista è più informativa: http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html – vanje