Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在写入CSV文件。myPackage.MyClass不能强制转换为java.lang.CharSequence_Java_Csv_Charsequence - Fatal编程技术网

正在写入CSV文件。myPackage.MyClass不能强制转换为java.lang.CharSequence

正在写入CSV文件。myPackage.MyClass不能强制转换为java.lang.CharSequence,java,csv,charsequence,Java,Csv,Charsequence,我需要将列表写入CSV文件。特别是我需要编写值。MyClass具有以下实现: public class MyClass { private Object[] values; //... @Override public String toString() { String line = ""; for (int i=0; i<this.getSize(); i++) { //if (this.va

我需要将列表
写入CSV文件。特别是我需要编写
。MyClass具有以下实现:

public class MyClass {
    private Object[] values;
//...
    @Override
    public String toString() 
      {
        String line = "";
        for (int i=0; i<this.getSize(); i++) {
            //if (this.values[i] != null) {
                line = line + this.values[i] + " ";
            //}
        }
        return line;
     }
}
如何解决这个问题?Thx.

试试:

 String element = result.next().toString(); 
 writer.append(element);
 if(i < columnSize - 1)
   writer.append(',');
String元素=result.next().toString();
writer.append(元素);
如果(i
您需要在强制转换到CharSequence之前调用toString()。

尝试显式调用toString()方法,如

CharSequence element = (CharSequence)result.next().toString(); 
CsvWriter.java

import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Collection;

/**
 * Composes CSV data for collection of objects. Relays on theirs {@link Object#toString toString()} implementation.<br>
 * Could use memory buffer for the data or write straight to the output stream.
 * <p>
 * Example 1:
 * 
 * <pre>
 * Object[][] data = ...
 * 
 * CsvWriter writer = new CsvWriter();
 * writer.write("Column 1", "Column 2", ... "Column N");
 * for (Object[] values : data)
 *      writer.write(values);
 * ...
 * System.out.println(writer.toString());
 * </pre>
 * <p>
 * Example 2:
 * 
 * <pre>
 * Object[][] data = ...
 * 
 * CsvWriter writer = null;
 * try { 
 *      writer = new CsvWriter(new FileOutputStream(new File("data.csv")));
 *      writer.write("Column 1", "Column 2", ... "Column N");
 *      for (Object[] values : data)
 *          writer.write(values);
 * } finally {
 *      writer.close();
 * }
 * </pre>
 * 
 * @author Mykhaylo Adamovych
 */
public class CsvWriter implements Closeable {
    public static final String NULL_MARK = "";
    public static final String QUOTE = "\"";
    private String nullMark = NULL_MARK;
    private final PrintWriter pw;
    private ByteArrayOutputStream baos;

    /**
     * Creates temporary buffer in the memory. <br>
     * Use {@link #toString()} thereafter. No need to close.
     */
    public CsvWriter() {
        baos = new ByteArrayOutputStream();
        pw = new PrintWriter(baos, true);
    }

    /**
     * Doesn't consume memory for CSV data, writes straight to the output stream. Just like {@link FilterOutputStream}, but deal with objects and relays on
     * theirs {@link Object#toString toString()} implementation.<br>
     * Close writer thereafter.
     * 
     * @param os
     *            output stream to write data.
     */
    public CsvWriter(OutputStream os) {
        pw = new PrintWriter(os, true);
    }

    protected String composeRecord(Object... values) {
        if (values == null || values.length == 0)
            return "";
        final StringBuffer csvRecord = new StringBuffer();
        csvRecord.append(QUOTE);
        csvRecord.append(composeValue(values[0]));
        csvRecord.append(QUOTE);
        for (int i = 1; i < values.length; i++) {
            csvRecord.append("," + QUOTE);
            csvRecord.append(composeValue(values[i]));
            csvRecord.append(QUOTE);
        }
        return csvRecord.toString();
    }

    protected String composeValue(Object value) {
        if (value == null)
            return nullMark;
        return value.toString().replaceAll(QUOTE, QUOTE + QUOTE);
    }

    public String getNullMark() {
        return nullMark;
    }

    public void setNullMark(String nullMarker) {
        nullMark = nullMarker;
    }

    @Override
    public String toString() {
        if (baos == null)
            throw new UnsupportedOperationException();
        return baos.toString();
    }

    /**
     * Writes collection of objects as CSV record.
     * 
     * @param values
     */
    public void write(Collection<?> values) {
        write(values.toArray());
    }

    /**
     * Writes collection of objects as CSV record.
     * 
     * @param values
     */
    public void write(Object... values) {
        pw.println(composeRecord(values));
    }

    @Override
    public void close() throws IOException {
        if (baos != null)
            throw new UnsupportedOperationException();
        pw.close();
    }
}

好的,现在它在java.util.AbstractList$Itr.next(未知源代码)处显示java.util.NoSuchElementException。我解决了这个问题。我必须在对象[]中的元素之间进行分离。
CharSequence element = (CharSequence)result.next().toString(); 
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Collection;

/**
 * Composes CSV data for collection of objects. Relays on theirs {@link Object#toString toString()} implementation.<br>
 * Could use memory buffer for the data or write straight to the output stream.
 * <p>
 * Example 1:
 * 
 * <pre>
 * Object[][] data = ...
 * 
 * CsvWriter writer = new CsvWriter();
 * writer.write("Column 1", "Column 2", ... "Column N");
 * for (Object[] values : data)
 *      writer.write(values);
 * ...
 * System.out.println(writer.toString());
 * </pre>
 * <p>
 * Example 2:
 * 
 * <pre>
 * Object[][] data = ...
 * 
 * CsvWriter writer = null;
 * try { 
 *      writer = new CsvWriter(new FileOutputStream(new File("data.csv")));
 *      writer.write("Column 1", "Column 2", ... "Column N");
 *      for (Object[] values : data)
 *          writer.write(values);
 * } finally {
 *      writer.close();
 * }
 * </pre>
 * 
 * @author Mykhaylo Adamovych
 */
public class CsvWriter implements Closeable {
    public static final String NULL_MARK = "";
    public static final String QUOTE = "\"";
    private String nullMark = NULL_MARK;
    private final PrintWriter pw;
    private ByteArrayOutputStream baos;

    /**
     * Creates temporary buffer in the memory. <br>
     * Use {@link #toString()} thereafter. No need to close.
     */
    public CsvWriter() {
        baos = new ByteArrayOutputStream();
        pw = new PrintWriter(baos, true);
    }

    /**
     * Doesn't consume memory for CSV data, writes straight to the output stream. Just like {@link FilterOutputStream}, but deal with objects and relays on
     * theirs {@link Object#toString toString()} implementation.<br>
     * Close writer thereafter.
     * 
     * @param os
     *            output stream to write data.
     */
    public CsvWriter(OutputStream os) {
        pw = new PrintWriter(os, true);
    }

    protected String composeRecord(Object... values) {
        if (values == null || values.length == 0)
            return "";
        final StringBuffer csvRecord = new StringBuffer();
        csvRecord.append(QUOTE);
        csvRecord.append(composeValue(values[0]));
        csvRecord.append(QUOTE);
        for (int i = 1; i < values.length; i++) {
            csvRecord.append("," + QUOTE);
            csvRecord.append(composeValue(values[i]));
            csvRecord.append(QUOTE);
        }
        return csvRecord.toString();
    }

    protected String composeValue(Object value) {
        if (value == null)
            return nullMark;
        return value.toString().replaceAll(QUOTE, QUOTE + QUOTE);
    }

    public String getNullMark() {
        return nullMark;
    }

    public void setNullMark(String nullMarker) {
        nullMark = nullMarker;
    }

    @Override
    public String toString() {
        if (baos == null)
            throw new UnsupportedOperationException();
        return baos.toString();
    }

    /**
     * Writes collection of objects as CSV record.
     * 
     * @param values
     */
    public void write(Collection<?> values) {
        write(values.toArray());
    }

    /**
     * Writes collection of objects as CSV record.
     * 
     * @param values
     */
    public void write(Object... values) {
        pw.println(composeRecord(values));
    }

    @Override
    public void close() throws IOException {
        if (baos != null)
            throw new UnsupportedOperationException();
        pw.close();
    }
}
public class MyClass {
    private Object[][] data;
//...
    @Override
    public String toCsv() {
        CsvWriter writer = new CsvWriter();
        csvWriter.write("Column1", "Column2")
        for (final Object[] values : data)
            csvWriter.write(values);
        return writer.toString();
     }
}