2013-09-01 4 views
21

Пожалуйста, посмотрите на следующий кодЧтение и запись текста в формате 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); 
    } 
} 

Я пытаюсь прочитать файл CSV, редактировать текст в коде, и записать его обратно в файл .txt. Моя проблема в том, что у меня есть португальские слова, поэтому файл следует читать и писать с использованием формата ANSI. Сейчас некоторые португальские слова заменяются символами в выходном файле.

Как я могу читать и записывать текстовые данные в файл в формате ANSI на Java?

+1

Список farmacias = Files.readAllLines (Paths.get ("c: \\ tmp \\ Farmacias.txt"), Charset.forName ("Cp1252")); –

+0

Я не согласен> Правильная кодировка Java для Windows ANSI - это Cp1252. ANSI - это трюк Microsoft, и его можно настроить на различные кодировки. Это может быть GBK, Shift_JIS и т. Д., В зависимости от настройки Windows. – TKJohn

ответ

41

Для чтения текстового файла с определенной кодировкой вы можете использовать FileInputStream в сочетании с InputStreamReader. Правильная кодировка Java для Windows ANSI - Cp1252.

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

Чтобы написать текстовый файл с определенным характером кодировки Вы можете использовать FileOutputStream вместе с OutputStreamWriter.

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

Классов InputStreamReader и OutputStreamWriter преобразование между байтовыми потоками и ориентированным текстом с определенной кодировкой символов.

+1

Почему Cp1252 не указан [здесь] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html)? –

+3

Возможно, этот список более информативен: http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html – vanje