জাভার জন্য সিএসভি এপিআই [বন্ধ]


164

যে কেউ এমন একটি সহজ এপিআই সুপারিশ করতে পারে যা আমাকে একটি সিএসভি ইনপুট ফাইলটি পড়তে, কিছু সাধারণ রূপান্তর করতে এবং তারপরে এটি লেখার অনুমতি দেয়।

একটি দ্রুত গুগল http://flatpack.sourceforge.net/ খুঁজে পেয়েছে যা আশাব্যঞ্জক বলে মনে হচ্ছে।

আমি নিজেকে এই এপিআইতে জুটি দেওয়ার আগে অন্যরা কী ব্যবহার করছে তা যাচাই করতে চেয়েছিলাম।


সফ্টওয়্যার লাইব্রেরিতে পরামর্শের জন্য জিজ্ঞাসা করার সময় বোন সাইটের সফ্টওয়্যার প্রস্তাবনাগুলি স্ট্যাক এক্সচেঞ্জ ব্যবহার করুন। রয়েছে জাভা & CSV তে জন্য বিভিন্ন হিট
বাসিল বাউরক

উত্তর:


32

অ্যাপাচি কমন্স সিএসভি

পরীক্ষা করে দেখুন এ্যাপাচি প্রচলিত যে CSV

এই গ্রন্থাগারটি স্ট্যান্ডার্ড ওয়ান আরএফসি 4180 সহ সিএসভি-র বিভিন্ন প্রকারের পাঠ করে এবং লেখায় । ট্যাব-সীমাবদ্ধ ফাইলগুলিও পড়ে / লেখেন ।

  • সীমা অতিক্রম করা
  • InformixUnload
  • InformixUnloadCsv
  • মাইএসকিউএল
  • আকাশবাণী
  • PostgreSQLCsv
  • PostgreSQLText
  • RFC4180
  • TDF

আমি বেশ কিছু সময়ের জন্য স্যান্ডবক্সযুক্ত কমন্স সিএসভি ব্যবহার করেছি এবং কখনও কোনও সমস্যা অনুভব করেছি। আমি সত্যই আশা করি তারা এটিকে পুরো স্ট্যান্ডিংয়ে প্রচার করবে এবং এটিকে স্যান্ডবক্স থেকে বের করবে।
অ্যালেক্স মার্শাল

3
@ bmatthews68 স্যান্ডবক্সের লিঙ্কটি বিচ্ছিন্ন - দেখে মনে হচ্ছে এটি অ্যাপাচি কমন্সে যথাযথভাবে সরানো হয়েছে (উত্তরে আমিও লিঙ্কটি সম্পাদনা করেছি)
ড্রেভিকো

অ্যাপাচি কমন্সের উদাহরণগুলি এখানে: apisonar.com/java-example/org.apache.commons.csv.html
এপিআইসোনার

83

আমি অতীতে ওপেনসিএসভি ব্যবহার করেছি ।

import au.com.bytecode.opencsv.CSVReader;

স্ট্রিং ফাইলের নাম = "ডেটা সিএসভি";
CSVReader পাঠক = নতুন CSVReader (নতুন ফাইলআরডার (ফাইলের নাম));

// যদি প্রথম লাইনটি শিরোনাম হয় স্ট্রিং [] শিরোনাম = পাঠক.প্রেমনেক্সট ();
// রিডারের উপরে পুনরাবৃত্তি করুন.রেডনেক্সট এটি শূন্য না হওয়া পর্যন্ত স্ট্রিং [] লাইন = রিডার.ড্রেডনেক্সট ();

অন্য প্রশ্নের উত্তরে কিছু অন্যান্য পছন্দ ছিল ।


দুর্ভাগ্যক্রমে, ওপেনসিএসভি-র সর্বশেষ ডাউনলোড (মন্তব্যের সময় v2.2) সংকলন করে না এবং তারা একটি পূর্ব-নির্মিত বাইনারি সরবরাহ করে না।
opyate

9
সোর্সফর্স থেকে আমি যে প্যাকেজটি ডাউনলোড করেছি তার ডিফলি ফোল্ডারে একটি বাইনারি ছিল।
মাইক সিকলার

8
আপনি যদি মাভেন ব্যবহার করছেন তবে অনুগ্রহ করে নোট করুন যে অফিসিয়াল ওয়েবসাইটের নির্ভরতা কোডটিতে সংস্করণ ঘোষণা "2.0" রয়েছে যাতে কিছু বাগ রয়েছে তবে সংগ্রহস্থলগুলিতে আপডেট সংস্করণ 2.3 রয়েছে।
চৌদ্দ

এই lib পৃথক থ্রেডে ফাইল লিখবে না, না?
ইওকস

3
অনুযায়ী github.com/uniVocity/csv-parsers-comparison তুলনায় ধীর গড় 73% uniVocity ..
Ewoks

32

আপডেট: এই উত্তরের কোডটি সুপার সিএসভি 1.52 এর জন্য। সুপার সিএসভি ২.৪.০ এর জন্য আপডেট হওয়া কোড উদাহরণগুলি প্রকল্পের ওয়েবসাইটে পাওয়া যাবে: http://super-csv.github.io/super-csv/index.html


সুপারসিএসভি প্রকল্পটি সরাসরি সিএসভি কোষগুলির বিশ্লেষণ এবং কাঠামোগত ম্যানিপুলেশন সমর্থন করে। Http://super-csv.github.io/super-csv/example_reading.html থেকে আপনি যেমন খুঁজে পাবেন

একটি ক্লাস দেওয়া

public class UserBean {
    String username, password, street, town;
    int zip;

    public String getPassword() { return password; }
    public String getStreet() { return street; }
    public String getTown() { return town; }
    public String getUsername() { return username; }
    public int getZip() { return zip; }
    public void setPassword(String password) { this.password = password; }
    public void setStreet(String street) { this.street = street; }
    public void setTown(String town) { this.town = town; }
    public void setUsername(String username) { this.username = username; }
    public void setZip(int zip) { this.zip = zip; }
}

এবং আপনার একটি শিরোনাম সহ সিএসভি ফাইল রয়েছে। আসুন নিম্নলিখিত বিষয়বস্তু ধরে নেওয়া যাক

username, password,   date,        zip,  town
Klaus,    qwexyKiks,  17/1/2007,   1111, New York
Oufu,     bobilop,    10/10/2007,  4555, New York

তারপরে আপনি ইউজারবিয়ান একটি উদাহরণ তৈরি করতে পারেন এবং নীচের কোডটি দিয়ে ফাইলের দ্বিতীয় লাইন থেকে মান সহ এটি তৈরি করতে পারেন

class ReadingObjects {
  public static void main(String[] args) throws Exception{
    ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
    try {
      final String[] header = inFile.getCSVHeader(true);
      UserBean user;
      while( (user = inFile.read(UserBean.class, header, processors)) != null) {
        System.out.println(user.getZip());
      }
    } finally {
      inFile.close();
    }
  }
}

নিম্নলিখিত "ম্যানিপুলেশন স্পেসিফিকেশন" ব্যবহার

final CellProcessor[] processors = new CellProcessor[] {
    new Unique(new StrMinMax(5, 20)),
    new StrMinMax(8, 35),
    new ParseDate("dd/MM/yyyy"),
    new Optional(new ParseInt()),
    null
};

1
আপনার কোডটি সংকলন করবে না তাই আমি কিছু সংশোধন জমা দিয়েছি। এছাড়াও, পার্সেডেট () সঠিকভাবে কাজ করে না তাই আমি স্ট্রিং পড়ার জন্য এটি প্রতিস্থাপন করেছি। এটি পরে পার্স করা যায়।

1
বড় সীমাবদ্ধতা: সুপারসিএসভি থ্রেডসেফ নয়, আমি জ্যাকসনের দিকে তাকাচ্ছি, যদিও এটি আরও বৈশিষ্ট্য সীমিত হতে পারে
ZiglioUK

সুপারসিএসভি মাল্টিম্যাপ ব্যবহার করার অনুমতি দেয় না। এটি মাল্টিম্যাপস সহ কাজ করে দেখে ভাল লাগবে।
সিড

19

সিএসভি ফর্ম্যাট বিবরণ পড়া আমার মনে হয় যে তৃতীয় পক্ষের গ্রন্থাগারটি নিজের লেখার চেয়ে মাথা ব্যথা কম হবে:

উইকিপিডিয়া 10 বা কিছু পরিচিত গ্রন্থাগার তালিকাবদ্ধ করে:

আমি কিছু ধরণের চেক তালিকা ব্যবহার করে তালিকাভুক্ত libs তুলনা করেছি। ওপেনসিএসভি নিম্নলিখিত ফলাফল সহ আমার ( ওয়াইএমএমভি ) বিজয়ী হয়েছে:

+ maven

+ maven - release version   // had some cryptic issues at _Hudson_ with snapshot references => prefer to be on a safe side

+ code examples

+ open source   // as in "can hack myself if needed"

+ understandable javadoc   // as opposed to eg javadocs of _genjava gj-csv_

+ compact API   // YAGNI (note *flatpack* seems to have much richer API than OpenCSV)

- reference to specification used   // I really like it when people can explain what they're doing

- reference to _RFC 4180_ support   // would qualify as simplest form of specification to me

- releases changelog   // absence is quite a pity, given how simple it'd be to get with maven-changes-plugin   // _flatpack_, for comparison, has quite helpful changelog

+ bug tracking

+ active   // as in "can submit a bug and expect a fixed release soon"

+ positive feedback   // Recommended By 51 users at sourceforge (as of now)

8

আমরা জাভাসিএসভি ব্যবহার করি , এটি বেশ ভালভাবে কাজ করে


3
এই লাইব্রেরির একমাত্র সমস্যা হ'ল এটি \r\nযখন আপনাকে উইন্ডোজ চলমান না তখন উইন্ডোজ লাইন টার্মিনেটর ( ) দিয়ে সিএসভি ফাইল আউটপুট করতে দেয় না। লেখক বছরের পর বছর ধরে সহায়তা সরবরাহ করেন নি। সেই অনুপস্থিত বৈশিষ্ট্যটির জন্য আমাকে এটি কাঁটাতে হয়েছিল
মোস্তি মোস্তাচো

6

সর্বশেষ এন্টারপ্রাইজ অ্যাপ্লিকেশনটির জন্য আমি উল্লেখযোগ্য পরিমাণে সিএসভি হ্যান্ডেল করার জন্য প্রয়োজনীয় কাজ করেছি - কয়েক মাস আগে - আমি সোর্সফোরেজে সুপারসিএসভি ব্যবহার করেছি এবং এটি সহজ, দৃust় এবং সমস্যামুক্ত পেয়েছি।


সুপারসিএসভি-র জন্য +1, তবে এতে কিছু বাজে বাগ রয়েছে যা এখনও স্থির হয়নি, নতুন বাগগুলি বর্তমানে পরিচালনা করা হয় না এবং শেষ প্রকাশটি প্রায় দুই বছর পুরানো। তবে আমরা কোনও সমস্যা ছাড়াই উত্পাদনে একটি প্যাচড / সংশোধিত সংস্করণ ব্যবহার করছি।
MRalwasser

2
@ এমআরালওয়াসার সুপার সিএসভি 2.0.0-বিটা -1 সম্প্রতি প্রকাশিত হয়েছে। এটিতে অনেক বাগ ফিক্স এবং নতুন বৈশিষ্ট্য (মাভেন সমর্থন এবং নেস্টেড প্রপার্টি এবং অ্যারে / সংগ্রহগুলি ম্যাপিংয়ের জন্য একটি নতুন ডোজার এক্সটেনশন সহ) অন্তর্ভুক্ত রয়েছে
জেমস বাসেট

1
@ হাউন্ড-ডগ আপডেটের জন্য আপনাকে ধন্যবাদ, আমি ইতিমধ্যে নতুন বিটাটি লক্ষ্য করেছি এবং প্রকল্পটি জীবিত দেখে আমি আনন্দিত - যদিও কমিটের ফ্রিকোয়েন্সি আমাকে এখনও কিছুটা ভয় দেয় (প্রায় সমস্ত কিছু শুধুমাত্র কিছুদিনের জন্যই কমিট করে)। তবে আমি একবার দেখে নেব। চূড়ান্ত ২.০ এর মুক্তির তারিখ কি আছে?
এমআরয়ালওয়াসার

2
@ এমআরওয়ালসার এই মুহূর্তে আমি একমাত্র দেব এবং পুরো সময়ের কাজ করেছি, তাই আমি যখনই ফ্রি উইকএন্ড পাই তখনই আমি এটি নিয়ে কাজ করার প্রবণতা পোষণ করি - অতএব স্পোর্টাসিক কমিট করে :) এখন বিটার প্রায় 1000 এসএফ ডাউনলোড, এবং কোনও বাগ নেই, সুতরাং পরবর্তী মাসের প্রথম দিকে একটি চূড়ান্ত রিলিজের জন্য ট্র্যাক খুঁজছি। ভবিষ্যতের বৈশিষ্ট্যগুলির জন্য আপনার যদি কোনও ধারণা থাকে তবে দয়া করে আমাদের জানান।
জেমস বাসেট

1
SuperCSV না threadsafe এই পর্যায়ে, করে নির্মিত হয় এটা সত্যিই শক্তসমর্থ না এই প্রোগ্রামটিতে এ
ZiglioUK

5

আপনি সিএসভ্রেডার এপিআই ব্যবহার করতে পারেন এবং নিম্নলিখিত অবস্থান থেকে ডাউনলোড করতে পারেন:

http://sourceforge.net/projects/javacsv/files/JavaCsv/JavaCsv%202.1/javacsv2.1.zip/download

অথবা

http://sourceforge.net/projects/javacsv/

নিম্নলিখিত কোড ব্যবহার করুন:

/ ************ For Reading ***************/

import java.io.FileNotFoundException;
import java.io.IOException;

import com.csvreader.CsvReader;

public class CsvReaderExample {

    public static void main(String[] args) {
        try {

            CsvReader products = new CsvReader("products.csv");

            products.readHeaders();

            while (products.readRecord())
            {
                String productID = products.get("ProductID");
                String productName = products.get("ProductName");
                String supplierID = products.get("SupplierID");
                String categoryID = products.get("CategoryID");
                String quantityPerUnit = products.get("QuantityPerUnit");
                String unitPrice = products.get("UnitPrice");
                String unitsInStock = products.get("UnitsInStock");
                String unitsOnOrder = products.get("UnitsOnOrder");
                String reorderLevel = products.get("ReorderLevel");
                String discontinued = products.get("Discontinued");

                // perform program logic here
                System.out.println(productID + ":" + productName);
            }

            products.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

সিএসভি ফাইলে লিখুন / সংযোজন করুন

কোড:

/************* For Writing ***************************/

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import com.csvreader.CsvWriter;

public class CsvWriterAppendExample {

    public static void main(String[] args) {

        String outputFile = "users.csv";

        // before we open the file check to see if it already exists
        boolean alreadyExists = new File(outputFile).exists();

        try {
            // use FileWriter constructor that specifies open for appending
            CsvWriter csvOutput = new CsvWriter(new FileWriter(outputFile, true), ',');

            // if the file didn't already exist then we need to write out the header line
            if (!alreadyExists)
            {
                csvOutput.write("id");
                csvOutput.write("name");
                csvOutput.endRecord();
            }
            // else assume that the file already has the correct header line

            // write out a few records
            csvOutput.write("1");
            csvOutput.write("Bruce");
            csvOutput.endRecord();

            csvOutput.write("2");
            csvOutput.write("John");
            csvOutput.endRecord();

            csvOutput.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}


2

স্ট্রিংটোকেনাইজারের জন্য সিএসভি ফর্ম্যাটটি যথেষ্ট সহজ শোনায় তবে এটি আরও জটিল হয়ে উঠতে পারে। এখানে জার্মানিতে একটি সেমিকোলন একটি ডিলিমিটার হিসাবে ব্যবহৃত হয় এবং ডিলিমিটরযুক্ত কোষগুলি এড়ানো দরকার। আপনি স্ট্রিংটোকনাইজারের সাহায্যে সহজেই এটি পরিচালনা করতে যাচ্ছেন না।

আমি http://sourceforge.net/projects/javacsv এ যাব


0

আপনি যদি এক্সেল থেকে সিএসভি পড়ার তাগিদ দেন তবে কিছু আকর্ষণীয় কর্নার কেস রয়েছে। আমি তাদের সব মনে করতে পারি না, তবে অ্যাপাচি কমন্স সিএসভি সঠিকভাবে পরিচালনা করতে সক্ষম ছিল না (উদাহরণস্বরূপ, ইউআরএল)।

কোটেল এবং কমা এবং সমস্ত স্থান জুড়ে স্ল্যাশ সহ এক্সেল আউটপুট পরীক্ষা করে দেখুন।


এ্যাপাচি কমন্স করা CSV গ্রন্থাগার দেওয়া হয় মাইক্রোসফট এক্সেল এর জন্য কোনো সুনির্দিষ্ট বৈকল্পিক । আমি জানি না যে এটি এখন আপনার দ্বারা বর্ণিত সমস্যাগুলি পরিচালনা করে কিনা।
বাসিল বাউরক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.