用于整数的outputstream writer Java

时间:2019-02-06 15:51:48

标签: java csv

我是Java的新手,我需要使用Java将xml保存到csv,但是问题是我不能使用CSVWriter,因为在xml中也有UTF8编码的数据。

因此,我发现可以使用outputstreamwriter,它可以用UTF8进行编码。

对于字符串,一切正常,但对于整数,我无法获取正确的数字。

示例代码:

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.*; 

public class UTF8WriterDemo {

    public static void main(String[] args) {
        Writer out = null;
        try {
            out = new BufferedWriter(
                    new OutputStreamWriter(new FileOutputStream("c://java2//file.csv"), "windows-1250"));


//for (int i=0; i<4; i++ ) {



            String text = "This tečt will be added to File !!";
            int hu = 4;


            out.write('\ufeff');

            out.write(text+ '\n');   
            out.write(hu+ '\n');  
//}

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

    }

}

我得到的是图片而不是数字。 我想这是因为:

  

OutputStreamWriter是从字符流到字节流的桥梁:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以显式指定,或者可以接受平台的默认字符集。

这就是为什么显示不正确的原因。

因此,我想问一下,是否可以使用outputstreamwriter显示整数?

或者,如果没有,如何使用Java将UTF8编码字符转换为CSV数据?

谢谢

3 个答案:

答案 0 :(得分:0)

Java在使用双引号和单引号之间有区别。

  • "foo"是一个字符串。
  • 'f'是一个字符(或字符)
  • 'foo'将引发异常,因为您在char中只能包含1个字符。

'\n'也是1个字符,特别是换行符。加一个数字和一个字符将把数字用作ASCII值并使用相应的字符,然后将两个字符组合成一个String(或字符数组,即char [])。

使用双引号可以解决您的问题。

答案 1 :(得分:0)

import java.io.*;

public class UTF8WriterDemo {
    public static void main(String[] args) {
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new      FileOutputStream("file.csv"), "windows-1250"));

            //for (int i = 0; i < 4; i++) {

                String text = "This text will be added to File !!";
                int hu = 4;
                String text2 = new String("" + hu);

                out.write('\ufeff');

                out.write(text + '\n');
                out.write(text2 + '\n');
        //  }

            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("The process is completed.");
        }

    }

}

答案 2 :(得分:0)

实际上我需要重写此构造:

FileWriter fileWriter = new 

FileWriter("C:\\java\\test\\EEexample3.csv");
        CSVWriter csvWriter = new CSVWriter(fileWriter);
        csvWriter.writeNext(new String[] {
            ..
..
..
..
        }

.. code ..代码..

String homeCurrencyPriceString = iit.getHomeCurrency().getPrice()!=null?iit.getHomeCurrency().getPrice().toString():"";
                                String headerDateString = invoiceHeaderType.getDateTax()!=null?invoiceHeaderType.getDateTax().toString():"";
                                String invoiceTypeString = invoiceHeaderType.getInvoiceType()!=null?invoiceHeaderType.getInvoiceType().value():"";
                                String headeraccountno= invoiceHeaderType.getAccount().getAccountNo()!=null?invoiceHeaderType.getAccount().getAccountNo().toString():"";
                                String headertext = invoiceHeaderType.getText()!=null?invoiceHeaderType.getText():"";
                                String invoiceitemtext= iit.getText()!=null?iit.getText():"";
                                String headericdph = invoiceHeaderType.getPartnerIdentity().getAddress().getIcDph()!=null?invoiceHeaderType.getPartnerIdentity().getAddress().getIcDph():"";
                                String symVar = invoiceHeaderType.getSymVar()!=null?invoiceHeaderType.getSymVar():"";

                                csvWriter.writeNext(new String[] {
                            invoiceHeaderType.getPartnerIdentity().getAddress().getIco(), headericdph, invoiceHeaderType.getPartnerIdentity().getAddress().getCompany(),symVar, invoiceHeaderType.getId().toString(), iit.getId().toString(), homeCurrencyPriceString, detailcentreString,headercentreString, headerDateString, invoiceTypeString,headeraccountno, headertext,invoiceitemtext
                                });

对象由xml填充

输出outputwriter的构造。 因此,首先,我尝试将outputstream作为简单的代码,以确保其正常工作,然后在工作时,我想重写整个代码。

使用CSVwriter一切都可以顺利进行,只是现在添加了以UTF8 / windows1250编码的文本:(因此,我需要修复代码的构造。

偶数对象(例如price)都使用.toString()进行转换,因此也许可以不带int来使用。

我希望outputstreamwriter的作家能够做必要的事情。 我要尝试。