<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # OpenCSV 教程 原文:http://zetcode.com/articles/opencsv/ 在 Opencsv 教程中,我們展示了如何與 Opencsv 庫一起使用,該庫用于在 Java 中讀寫 CSV 文件。 我們提供了一些代碼示例,可在 Java 中使用 CSV。 該教程的源代碼也可以從作者的 Github [倉庫](https://github.com/janbodnar/Java-Advanced/tree/master/csv)中獲得。 CSV(逗號分隔值)格式是在電子表格和數據庫中使用的非常流行的導入和導出格式。 CSV 文件中的每一行都是一個數據記錄。 每個記錄由一個或多個字段組成,用逗號分隔。 盡管 CSV 格式是一種非常簡單的格式,但還是有許多差異,例如不同的定界符,換行或引號字符。 ## Opencsv 庫 Opencsv 是一個非常簡單的 Java CSV 解析器庫。 它的開發是由于缺乏商業友好許可證。 ```java <dependencies> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.1</version> </dependency> </dependencies> ``` 這是 Opencsv 的 Maven 依賴關系。 ## OpenCSV 讀取數據 以下示例從 CSV 文件讀取數字。 ```java $ tree . ├── nbactions.xml ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ └── OpenCSVReadEx.java │ └── resources │ └── numbers.csv └── test └── java ``` 這是項目結構。 `numbers.csv` ```java 3,5,6,2,1,7,8 4,5,7,3,2,8,9 ``` `numbers.csv`文件中有兩個數據記錄。 `OpenCSVReadEx.java` ```java package com.zetcode; import com.opencsv.CSVReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; public class OpenCSVReadEx { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/numbers.csv"; try (FileInputStream fis = new FileInputStream(fileName); InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); CSVReader reader = new CSVReader(isr)) { String[] nextLine; while ((nextLine = reader.readNext()) != null) { for (String e : nextLine) { System.out.format("%s ", e); } } } } } ``` 該示例從`numbers.csv`文件中讀取數字并將其打印到控制臺。 ```java String fileName = "src/main/resources/numbers.csv"; ``` 該文件位于`src/main/resources`目錄中。 ```java try (FileInputStream fis = new FileInputStream(fileName); InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8); CSVReader reader = new CSVReader(isr)) { ``` `CSVReader`是用于讀取 CSV 文件的類。 ```java while ((nextLine = reader.readNext()) != null) { for (String e: nextLine) { System.out.format("%s ", e); } } ``` 我們遍歷讀取器并將值打印到終端。 `readNext()`方法從緩沖區讀取下一行,并轉換為字符串數組。 ```java 3 5 6 2 1 7 8 4 5 7 3 2 8 9 ``` 這是程序的輸出。 ## 使用不同的分隔符的 OpenCSV 讀取 盡管有 CSV 文件的名稱,但也可以用逗號以外的分隔符分隔 CSV 文件。 下面的示例顯示如何讀取由豎線分隔的數字字符。 此示例使用 Gradle 工具構建。 ```java $ tree . ├── build.gradle ├── settings.gradle └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ └── OpenCSVReadEx2.java │ └── resources │ └── numbers.csv └── test ├── java └── resources ``` 我們展示了項目結構。 `settings.gradle` ```java rootProject.name = 'OpenCSVReadEx2' ``` 這是 Gradle 設置文件。 `build.gradle` ```java apply plugin: 'application' archivesBaseName = "readnumbers2" version = '1.0' mainClassName = "com.zetcode.OpenCSVReadEx2" sourceCompatibility = '1.8' compileJava.options.encoding = 'UTF-8' repositories { mavenCentral() } dependencies { compile group: 'com.opencsv', name: 'opencsv', version: '4.1' } ``` 這是 Gradle 構建文件。 `numbers.csv` ```java 1|2|3|4|5 6|7|3|9|8 9|1|1|0|2 ``` 我們有三行數字,中間用|分隔。 字符。 `OpenCSVReadEx2.java` ```java package com.zetcode; import com.opencsv.CSVParser; import com.opencsv.CSVParserBuilder; import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class OpenCSVReadEx2 { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/numbers.csv"; Path myPath = Paths.get(fileName); CSVParser parser = new CSVParserBuilder().withSeparator('|').build(); try (BufferedReader br = Files.newBufferedReader(myPath, StandardCharsets.UTF_8); CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser) .build()) { List<String[]> rows = reader.readAll(); for (String[] row : rows) { for (String e : row) { System.out.format("%s ", e); } System.out.println(); } } } } ``` 該示例從`numbers.csv`文件中讀取值,并將其打印到控制臺。 ```java CSVParser parser = new CSVParserBuilder().withSeparator('|').build(); ``` 創建具有特定解析器字符的`CSVParser`。 ```java try (BufferedReader br = Files.newBufferedReader(myPath, StandardCharsets.UTF_8); CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser) .build()) { ``` 用`CSVReaderBuilder`創建一個`CSVReader`。 ```java List<String[]> rows = reader.readAll(); ``` 我們使用`readAll()`方法將所有元素讀入列表中。 此方法不應用于大文件。 ```java $ gradle build $ gradle run :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :run 1 2 3 4 5 6 7 3 9 8 9 1 1 0 2 ``` 我們構建并運行該示例。 ## OpenCSV 寫入數據 `CSVWriter`類用于將數據寫入 CSV 文件。 `OpenCSVWriteEx.java` ```java package com.zetcode; import com.opencsv.CSVWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; public class OpenCSVWriteEx { public static void main(String[] args) throws IOException { String[] entries = { "book", "coin", "pencil", "cup" }; String fileName = "src/main/resources/items.csv"; try (FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); CSVWriter writer = new CSVWriter(osw)) { writer.writeNext(entries); } } } ``` 該示例將數據從數組寫入`items.csv`文件。 該文件將寫入項目根目錄。 `writeNext()`方法將元素數組寫入文件。 在下一個代碼示例中,我們將所有數據一次性寫入。 `OpenCSVWriteEx2.java` ```java package com.zetcode; import com.opencsv.CSVWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; public class OpenCSVWriteEx2 { public static void main(String[] args) throws IOException { String[] items1 = {"book", "coin", "pencil"}; String[] items2 = {"pen", "chair", "lamp"}; String[] items3 = {"ball", "bowl", "spectacles"}; List<String[]> entries = new ArrayList<>(); entries.add(items1); entries.add(items2); entries.add(items3); String fileName = "src/main/resources/items.csv"; try (FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8); CSVWriter writer = new CSVWriter(osw)) { writer.writeAll(entries); } } } ``` 該示例使用`writeAll()`方法將數組列表寫入`items.csv`文件。 ## 將 SQL 數據轉換為 CSV 文件 以下示例從數據庫表中檢索數據并將其寫入 CSV 文件。 我們使用 MySQL 數據庫。 有關 MySQL 和 MySQL Java 編程的更多信息,請參見 [MySQL 教程](/databases/mysqltutorial/)和 [MySQL Java 教程](/db/mysqljava/)。 `cars_mysql.sql` ```java -- SQL for the Cars table CREATE TABLE Cars(Id BIGINT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(150), Price INTEGER); INSERT INTO Cars(Name, Price) VALUES('Audi', 52642); INSERT INTO Cars(Name, Price) VALUES('Mercedes', 57127); INSERT INTO Cars(Name, Price) VALUES('Skoda', 9000); INSERT INTO Cars(Name, Price) VALUES('Volvo', 29000); INSERT INTO Cars(Name, Price) VALUES('Bentley', 350000); INSERT INTO Cars(Name, Price) VALUES('Citroen', 21000); INSERT INTO Cars(Name, Price) VALUES('Hummer', 41400); INSERT INTO Cars(Name, Price) VALUES('Volkswagen', 21600); ``` 這是我們從中檢索數據的`Cars`表。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>OpenCSVDatabaseEx</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.45</version> </dependency> </dependencies> </project> ``` Maven 構建文件包含 Opencsv 和 MySQL 驅動程序的依賴項。 `OpenCSVDatabaseEx.java` ```java package com.zetcode; import com.opencsv.CSVWriter; import java.io.FileWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class OpenCSVDatabaseEx { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb?useSsl=false"; String user = "testuser"; String password = "test623"; String fileName = "src/main/resources/cars.csv"; Path myPath = Paths.get(fileName); try (Connection con = DriverManager.getConnection(url, user, password); PreparedStatement pst = con.prepareStatement("SELECT * FROM Cars"); ResultSet rs = pst.executeQuery()) { try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(myPath, StandardCharsets.UTF_8), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END)) { writer.writeAll(rs, true); } } catch (SQLException | IOException ex) { Logger.getLogger(OpenCSVDatabaseEx.class.getName()).log( Level.SEVERE, ex.getMessage(), ex); } } } ``` 在示例中,我們連接到 MySQL 數據庫并從`Cars`表中檢索所有行。 數據被寫入`cars.csv`文件。 ```java try (Connection con = DriverManager.getConnection(url, user, password); PreparedStatement pst = con.prepareStatement("SELECT * FROM Cars"); ResultSet rs = pst.executeQuery()) { ``` 我們使用驅動程序管理器連接到數據庫表,并執行`SELECT * FROM Cars`語句。 ```java try (CSVWriter writer = new CSVWriter(Files.newBufferedWriter(myPath, StandardCharsets.UTF_8), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END)) { ``` 我們創建一個`CSVWriter`,它帶有默認的分隔符,沒有引號,沒有轉義符和默認行尾。 ```java writer.writeAll(rs, true); ``` `writeAll()`方法將`java.sql.ResultSet`作為參數。 第二個參數指定是否應包含字段頭。 ```java $ cat cars.csv ID,NAME,PRICE 1,Audi,52642 2,Mercedes,57127 3,Skoda,9000 4,Volvo,29000 5,Bentley,350000 6,Citroen,21000 7,Hummer,41400 8,Volkswagen,21600 9,Toyota,26700 ``` 代碼示例將生成此文件。 ## Opencsv 映射到 JavaBeans `CsvToBean`用于將 CSV 數據映射到 JavaBeans。 ### 按列名映射 使用`HeaderColumnNameMappingStrategy`,我們可以使用 CSV 文件第一行中的列名將 CSV 數據映射到 Java 對象 ```java $ tree . ├── nbactions.xml ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── bean │ │ │ └── Car.java │ │ └── OpenCSVReadBeansEx.java │ └── resources │ └── cars.csv └── test └── java ``` This is the project structure. `cars.csv` ```java ID,NAME,PRICE 1,Audi,52642 2,Mercedes,57127 3,Skoda,9000 4,Volvo,29000 5,Bentley,350000 6,Citroen,21000 7,Hummer,41400 8,Volkswagen,21600 9,Toyota,26700 ``` 這是`cars.csv`文件。 第一條記錄包含列名。 `Car.java` ```java package com.zetcode.bean; import com.opencsv.bean.CsvBindByName; public class Car { @CsvBindByName private int id; @CsvBindByName private String name; @CsvBindByName private int price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Car{id=").append(id).append(", name=") .append(name).append(", price=").append(price).append("}"); return builder.toString(); } } ``` `Car`是 JavaBean。 它包含`@CsvBindByName`注解,用于將 bean 屬性映射到 CSV 列。 `OpenCSVReadBeansEx.java` ```java package com.zetcode; import com.opencsv.bean.CsvToBean; import com.opencsv.bean.CsvToBeanBuilder; import com.opencsv.bean.HeaderColumnNameMappingStrategy; import com.zetcode.bean.Car; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class OpenCSVReadBeansEx { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/cars.csv"; Path myPath = Paths.get(fileName); try (BufferedReader br = Files.newBufferedReader(myPath, StandardCharsets.UTF_8)) { HeaderColumnNameMappingStrategy<Car> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(Car.class); CsvToBean csvToBean = new CsvToBeanBuilder(br) .withType(Car.class) .withMappingStrategy(strategy) .withIgnoreLeadingWhiteSpace(true) .build(); List<Car> cars = csvToBean.parse(); cars.forEach(System.out::println); } } } ``` 該示例從`cars.csv`文件中讀取數據,并將它們映射到`Car`對象。 它使用`HeaderColumnNameMappingStrategy`。 ```java HeaderColumnNameMappingStrategy<Car> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(Car.class); ``` `HeaderColumnNameMappingStrategy`使用 CSV 文件第一行中的列名將數據映射到對象。 列順序無關緊要。 ```java CsvToBean csvToBean = new CsvToBeanBuilder(br) .withType(Car.class) .withMappingStrategy(strategy) .withIgnoreLeadingWhiteSpace(true) .build(); ``` 用`CsvToBeanBuilder`創建一個`CsvToBean`。 我們指定類型和映射策略。 ```java List<Car> cars = csvToBean.parse(); ``` 使用`CsvToBean`的`parse()`方法,我們將 CSV 數據解析到列表中。 ```java cars.forEach(System.out::println); ``` 我們遍歷 bean 列表并將它們打印到控制臺。 ```java Car{id=1, name=Audi, price=52642} Car{id=2, name=Mercedes, price=57127} Car{id=3, name=Skoda, price=9000} Car{id=4, name=Volvo, price=29000} Car{id=5, name=Bentley, price=350000} Car{id=6, name=Citroen, price=21000} Car{id=7, name=Hummer, price=41400} Car{id=8, name=Volkswagen, price=21600} Car{id=9, name=Toyota, price=26700} ``` 這是示例的輸出。 ### 按列位置進行映射 `ColumnPositionMappingStrategy`按列的位置映射。 `cars.csv` ```java 1,Audi,52642 2,Mercedes,57127 3,Skoda,9000 4,Volvo,29000 5,Bentley,350000 6,Citroen,21000 7,Hummer,41400 8,Volkswagen,21600 9,Toyota,26700 ``` 這是`cars.csv`文件。 `Car.java` ```java package com.zetcode.bean; import com.opencsv.bean.CsvBindByPosition; public class Car { @CsvBindByPosition(position = 0) private int id; @CsvBindByPosition(position = 1) private String name; @CsvBindByPosition(position = 2) private int price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Car{id=").append(id).append(", name=") .append(name).append(", price=").append(price).append("}"); return builder.toString(); } } ``` `@CsvBindByPosition`指定 CSV 輸入的列號和 bean 中的字段之間的綁定。 `OpenCSVReadBeansEx2.java` ```java package com.zetcode; import com.opencsv.bean.ColumnPositionMappingStrategy; import com.opencsv.bean.CsvToBean; import com.opencsv.bean.CsvToBeanBuilder; import com.zetcode.bean.Car; import java.io.BufferedReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; public class OpenCSVReadBeansEx2 { public static void main(String[] args) throws IOException { String fileName = "src/main/resources/cars.csv"; Path myPath = Paths.get(fileName); try (BufferedReader br = Files.newBufferedReader(myPath, StandardCharsets.UTF_8)) { ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy(); strategy.setType(Car.class); String[] fields = {"id", "name", "price"}; strategy.setColumnMapping(fields); CsvToBean csvToBean = new CsvToBeanBuilder(br) .withType(Car.class) .withMappingStrategy(strategy) .withIgnoreLeadingWhiteSpace(true) .build(); List<Car> cars = csvToBean.parse(); cars.forEach(System.out::println); } } } ``` 該示例從`cars.csv`文件中讀取數據,并將它們映射到`Car`對象。 它使用`ColumnPositionMappingStrategy`。 ```java ColumnPositionMappingStrategy strategy = new ColumnPositionMappingStrategy(); strategy.setType(Car.class); String[] fields = {"id", "name", "price"}; strategy.setColumnMapping(fields); ``` 我們創建一個`ColumnPositionMappingStrategy`。 使用`setColumnMapping()`,我們設置要映射的列名。 ## Opencsv 使用`StatefulBeanToCsv`編寫 JavaBeans 在下一個示例中,我們使用`StatefulBeanToCsv`將 JavaBeans 寫入 CSV。 `Car.java` ```java package com.zetcode.bean; public class Car { private int id; private String name; private int price; public Car() { } public Car(int id, String name, int price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Car{id=").append(id).append(", name=") .append(name).append(", price=").append(price).append("}"); return builder.toString(); } } ``` 這是一個`Car` bean。 `OpenCSVWriteBeansEx.java` ```java package com.zetcode; import com.opencsv.CSVWriter; import com.opencsv.bean.StatefulBeanToCsv; import com.opencsv.bean.StatefulBeanToCsvBuilder; import com.opencsv.exceptions.CsvDataTypeMismatchException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException; import com.zetcode.bean.Car; import java.io.BufferedWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class OpenCSVWriteBeansEx { public static void main(String[] args) { String fileName = "src/main/resources/cars.csv"; Path myPath = Paths.get(fileName); List<Car> cars = new ArrayList<>(); cars.add(new Car(1, "Audi", 52642)); cars.add(new Car(2, "Mercedes", 57127)); cars.add(new Car(3, "Skoda", 9000)); cars.add(new Car(4, "Volvo", 29000)); try (BufferedWriter writer = Files.newBufferedWriter(myPath, StandardCharsets.UTF_8)) { StatefulBeanToCsv<Car> beanToCsv = new StatefulBeanToCsvBuilder(writer) .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER) .build(); beanToCsv.write(cars); } catch (CsvDataTypeMismatchException | CsvRequiredFieldEmptyException | IOException ex) { Logger.getLogger(OpenCSVWriteBeansEx.class.getName()).log( Level.SEVERE, ex.getMessage(), ex); } } } ``` 該示例創建一個汽車對象列表,并將其寫入 CSV 文件。 ```java List<Car> cars = new ArrayList<>(); cars.add(new Car(1, "Audi", 52642)); cars.add(new Car(2, "Mercedes", 57127)); cars.add(new Car(3, "Skoda", 9000)); cars.add(new Car(4, "Volvo", 29000)); ``` 我們創建汽車對象列表。 ```java StatefulBeanToCsv<Car> beanToCsv = new StatefulBeanToCsvBuilder(writer) .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER) .build(); ``` 用`StatefulBeanToCsvBuilder`創建一個`StatefulBeanToCsv`。 ```java beanToCsv.write(cars); ``` Bean 被寫入文件。 在本教程中,我們使用了 Opencsv 庫。 我們已經從 CSV 文件讀取數據,將數據寫入 CSV 文件,從數據庫表中導出數據到 CSV 文件,以及將 CSV 數據映射到 bean。 您可能也對以下相關教程感興趣: [Java 教程](/lang/java/),[讀取 WAR 中的 CSV 文件](/articles/warcsv/),[Java 文本文件讀取](/articles/javareadtext/) 和 [jQuery 自動完成教程](/articles/jqueryautocomplete/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看