سؤال

ها هو صفي ،

public class FreebasePeopleResults {

public String intendedSearch;
public String weight;
public Double heightMeters;
public Integer age;
public String type;
public String parents;
public String profession;
public String alias;
public String children;
public String siblings;
public String spouse;
public String degree;
public String institution;
public String wikipediaId;
public String guid;
public String id;
public String gender;
public String name;
public String ethnicity;
public String articleText;
public String dob;

public String getWeight() {
    return weight;
}
public void setWeight(String weight) {
    this.weight = weight;
}
public Double getHeightMeters() {
    return heightMeters;
}
public void setHeightMeters(Double heightMeters) {
    this.heightMeters = heightMeters;
}
public String getParents() {
    return parents;
}
public void setParents(String parents) {
    this.parents = parents;
}
public Integer getAge() {
    return age;
}
public void setAge(Integer age) {
    this.age = age;
}       
public String getProfession() {
    return profession;
}
public void setProfession(String profession) {
    this.profession = profession;
}
public String getAlias() {
    return alias;
}
public void setAlias(String alias) {
    this.alias = alias;
}
public String getChildren() {
    return children;
}
public void setChildren(String children) {
    this.children = children;
}
public String getSpouse() {
    return spouse;
}
public void setSpouse(String spouse) {
    this.spouse = spouse;
}
public String getDegree() {
    return degree;
}
public void setDegree(String degree) {
    this.degree = degree;
}
public String getInstitution() {
    return institution;
}
public void setInstitution(String institution) {
    this.institution = institution;
}
public String getWikipediaId() {
    return wikipediaId;
}
public void setWikipediaId(String wikipediaId) {
    this.wikipediaId = wikipediaId;
}
public String getGuid() {
    return guid;
}
public void setGuid(String guid) {
    this.guid = guid;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getEthnicity() {
    return ethnicity;
}
public void setEthnicity(String ethnicity) {
    this.ethnicity = ethnicity;
}
public String getArticleText() {
    return articleText;
}
public void setArticleText(String articleText) {
    this.articleText = articleText;
}
public String getDob() {
    return dob;
}
public void setDob(String dob) {
    this.dob = dob;
}
public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}
public String getSiblings() {
    return siblings;
}
public void setSiblings(String siblings) {
    this.siblings = siblings;
}
public String getIntendedSearch() {
    return intendedSearch;
}
public void setIntendedSearch(String intendedSearch) {
    this.intendedSearch = intendedSearch;
}

}

ها هي طريقة كاتب CSV الخاص بي

 import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import org.supercsv.io.CsvBeanWriter;
import org.supercsv.prefs.CsvPreference;

public class CSVUtils {

    public static void writeCSVFromList(ArrayList<FreebasePeopleResults> people, boolean writeHeader) throws IOException{

        //String[] header = new String []{"title","acronym","globalId","interfaceId","developer","description","publisher","genre","subGenre","platform","esrb","reviewScore","releaseDate","price","cheatArticleId"};
        FileWriter file = new FileWriter("/brian/brian/Documents/people-freebase.csv", true);

        // write the partial data
        CsvBeanWriter writer = new CsvBeanWriter(file, CsvPreference.EXCEL_PREFERENCE);

        for(FreebasePeopleResults person:people){
            writer.write(person);
        }
        writer.close();
        // show output
    }           
}

ما زلت أحصل على أخطاء الإخراج. فيما يلي الخطأ: لا يوجد محتوى للكتابة للخط 2 السياق: السطر: 2 العمود: 0 خط RAW: NULL

الآن ، أعلم أنه الآن لاغية تمامًا ، لذلك أنا مرتبك.

هل كانت مفيدة؟

المحلول

لقد مرت بعض الوقت ، وربما انتقلت من هذا ، ولكن ...

كانت المشكلة في الواقع أنك لم تكن تزود الرأس إلى write() الطريقة ، أي يجب أن يكون

writer.write(person, header);

لسوء الحظ ، فإن واجهة برمجة التطبيقات هي مضللة بعض الشيء في استخدامها لتدوين VAR-ARGS في توقيع write() الطريقة ، كما يسمح null ليتم تمريره. ينص جافادوك بوضوح على أنه لا ينبغي عليك القيام بذلك ، ولكن لم يكن هناك فحص فارغ في التنفيذ: ومن هنا استثناء كنت تحصل عليه.

/**
 * Write an object
 * 
 * @param source
 *            at object (bean instance) whose values to extract
 * @param nameMapping
 *            defines the fields of the class that must be written. 
 *            null values are not allowed
 * @since 1.0
 */
public void write(Object source, String... nameMapping) throws IOException,
    SuperCSVReflectionException;

Super CSV 2.0.0-beta-1 خارج الآن. يحتفظ بـ var-args في write() الطريقة ، ولكنها تفشل بسرعة إذا قدمت فارغًا ، لذلك تعرف بالضبط ما هو الخطأ عندما تحصل على nullpointerxception مع ما يلي:

لا يمكن أن تكون صفيف namemapping فارغًا حيث يتم استخدامها لتعيين الحقول إلى الأعمدة

ويشمل أيضًا العديد من إصلاحات الأخطاء والميزات الجديدة (بما في ذلك دعم Maven وتمديد Dozer جديد لرسم خرائط الخصائص المتداخلة والصفائف/المجموعات).

نصائح أخرى

لا أرى أين تنشئ ArrayList<FreebasePeopleResults> people, ، ولكن قد تتحقق من أنه يحتوي على أكثر من عنصر واحد. كمثال على الترميز إلى الواجهة, ، فكر في استخدام List<FreebasePeopleResults> people كمعلمة رسمية.

إضافة: هل تمكنت من صنع هذا مثال رمز: اكتب ملف برأس الشغل؟

مثال: هنا مثال مبسط. أعتقد أنك تحتاج فقط إلى تحديد nameMapping عندما تستدعي write(). تحدد هذه الأسماء ما هي طرق الاتصال عبر التأمل.

إخراج وحدة التحكم:

name,age
Alpha,1
Beta,2
Gamma,3

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;

public class Main {

    private static final List<Person> people = new ArrayList<Person>();

    public static void main(String[] args) throws IOException {
        people.add(new Person("Alpha", 1));
        people.add(new Person("Beta", 2));
        people.add(new Person("Gamma", 3));
        ICsvBeanWriter writer = new CsvBeanWriter(
            new PrintWriter(System.out), CsvPreference.STANDARD_PREFERENCE);
        try {
            final String[] nameMapping = new String[]{"name", "age"};
            writer.writeHeader(nameMapping);
            for (Person p : people) {
                writer.write(p, nameMapping);
            }
        } finally {
            writer.close();
        }
    }
}

public class Person {

    String name;
    Integer age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
CellProcessor[] processors = new CellProcessor[] { new Optional(), new NotNull(),
                new Optional(), new Optional(), new NotNull(), new Optional()};

CsvBeanWriter writer = new CsvBeanWriter(file, CsvPreference.EXCEL_PREFERENCE)

writer.write(data,properties,processors);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top