我们使用OpenCSV来解析CSV文件,并使用CsvToBean类将其值直接绑定到模型对象(OpenJPA实体bean).
然而,问题是 - 在CSV中有一些值(显然)被解析为Strings,但应该在Date属性中设置,所以基本上CsvToBean类在尝试动态调用写入方法时死亡(即,它尝试设置Date属性) with raw String value).
OpenCSV中是否有任何工具允许我指定每列应映射到哪种类型?如果没有,你有什么建议可以扩展/重新实现以便于此吗?在/test/au/com/bytecode/opencsv/bean/目录下检查OpenCSV源代码分发中的其他可用strageties 让我没有接近结论.
我想我可以摆弄Date属性setter并使它成为一个泛型方法,它将类型作为参数传递,并尝试解析传递的值,Date如果它还没有Date,但....我们正在使用持久性注释实体,我不希望稍后看到这个"setter-hack"向我们开枪,因为OpenJPA Enhancer突然不喜欢通用的二传手.
我一直在抨击这个问题几个小时 - 我可能通过使用反射和编写我自己的bean绑定逻辑解决了这个问题,但是我不喜欢重新发明轮子并且有一种感觉/希望这可能在现有的OpenCSV框架内轻松完成.
如果需要,我可以发布一些代码,但真的没什么可看的.
有什么想法吗?谢谢.
我有各种CSV,包含一些标准列和一些完全随机的字段:
firstname, lastname, dog_name, fav_hat, fav_color
bill,smith,fido,porkpie,blue
james,smith,rover,bowler,purple
firstname, lastname, car_type, floor_number
tom, collins, ford, 14
jim, jones, toyota, 120
Run Code Online (Sandbox Code Playgroud)
所以我试图将它们解析为Person.class bean,它包含firstname和lastname,然后我有一个名为PersonAttribute.class的第二个类来保存......还有其他什么.
这两个类的讽刺大纲:
class Person {
public String firstname;
public String lastname;
public List<PersonAttribute> attribs;
}
class PersonAttribute {
public Person p;
public String key; // header name, ex. 'car_type'
public String value; // column value, ex. 'ford'
}
Run Code Online (Sandbox Code Playgroud)
我一直在opencsv中使用CsvToBean函数:
public static List<Person> parseToBeans(File csvFile, HashMap<String, String> mapStrategy, Class beanClass) throws IOException {
CSVReader reader = null;
try {
reader …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用opencsv库来编写csv文件.限制是我不想在磁盘上创建文件甚至是临时文件.有没有办法实现它?
从我看来,CSVWriter的构造函数需要一个FileWriter对象.
谢谢!
我需要帮助阅读文件夹和打开/输出csv数据,我已经使用了其他人写的例子,但没有一个对我有用.
我目前拥有的是这个,但它不输出文件:
$files = scandir($PathToCreate.$version."/"); //scan the folder
foreach($files as $file) { //for each file in the folder
//The following is another example I found but does not output anything I just need to open each file and be able to output / target specific data
$csv = array();
$lines = file($file, FILE_IGNORE_NEW_LINES);
foreach ($lines as $key => $value)
{
$csv[$key] = str_getcsv($value);
}
print_r($csv)
}
Run Code Online (Sandbox Code Playgroud) 我试图用Coldfusion和JavaLibrary解析CSV文件.我找到了一些例子,但似乎ColdFusion找不到Jar-File.
这是我的代码:
<cfset t01= getTickCount()>
<cfscript>
fileReader = createobject("java","java.io.FileReader");
fileReader.init("C:\Dev\files.csv");
csvReader = createObject("java","au.com.bytecode.opencsv.CSVReader");
csvReader.init(fileReader, ",");
</cfscript>
<cfset t02= getTickCount()>
<cfset ArrayData = csvReader.readAll()>
<cfset t03= getTickCount()>
<cfoutput>
Process Data: #t02 - t01# ms
Display Dump: #t03 - t02# ms
<cfdump var="ArrayData"><cfabort />
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
这是ErrorMessage:
java.lang.ClassNotFoundException: au.com.bytecode.opencsv.CSVReader
at coldfusion.bootstrap.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:235)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248).....more Stack blabla......
Run Code Online (Sandbox Code Playgroud)
我正在使用opencsv库.Jar文件位于以下文件夹中:
wwwroot的/ WEB-INF/lib中
我也多次重启服务器.
谢谢你的帮助!
如果我创建表并指定CSVSerde,则所有字段都将转换为字符串类型.
hive> create table foo(a int, b double, c string) row format serde 'com.bizo.hive.serde.csv.CSVSerde' stored as textfile;
OK
Time taken: 0.22 seconds
hive> describe foo;
OK
a string from deserializer
b string from deserializer
c string from deserializer
Time taken: 0.063 seconds, Fetched: 3 row(s)
Serde来自https://github.com/ogrodnek/csv-serde
如果我从这个页面https://cwiki.apache.org/confluence/display/Hive/CSV+Serde尝试serde'org.apache.hadoop.hive.serde2.OpenCSVSerde',我看到了同样的事情.所有字段都将更改为字符串类型.
Hive版本1.2.1 Hadoop版本2.7.0 java版本"1.7.0_80"
我正在尝试编写程序来读取CSV文件,然后用它做一些东西。我进行了很多搜索,终于找到了这个库。
几天前,我完成了代码,一切正常。今天,我将该库更新为4.0 v,然后弹出了很多警告。
我进行了一些测试,但失败的部分是:
public void LeerCSV(File CSVCat, File CSVProd){
//Creo un objeto de la clase FileReader que me hace falta para los CSVReader
CSVReaderBuilder lectorCatBuilder = null;
CSVReaderBuilder lectorProdBuilder = null;
CSVReader CatReader = null;
CSVReader ProdReader = null;
CSVParser CatParser = null;
CSVParser ProdParser = null;
//Vamos a intentar abrirlos y operar con ellos
try {
//Se crea una especie de "constructor" para crear los lectores de archivos.
//para ello, antes se le pasan todos los …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenCSVSerde以及一些整数和日期列创建一个表。但是列将转换为String。这是预期的结果吗?解决方法是,在此步骤之后进行显式类型转换(这会使完整的运行变慢)
hive> create external table if not exists response(response_id int,lead_id int,creat_date date ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ('quoteChar' = '"', 'separatorChar' = '\,', 'serialization.encoding'='UTF-8', 'escapeChar' = '~') location '/prod/hive/db/response' TBLPROPERTIES ("serialization.null.format"="");
OK
Time taken: 0.396 seconds
hive> describe formatted response;
OK
# col_name data_type comment
response_id string from deserializer
lead_id string from deserializer
creat_date string from deserializer
Run Code Online (Sandbox Code Playgroud)
解释将数据类型更改为字符串的源代码。
我必须使用打开的 csv 将嵌套的对象列表(StoreLocations)写入 Csv 文件。我的模型类是-
public class StoreLocation {
private String name;
private String city;
private int zip;
private String streetAndNumber;
private List<String> keywords;
private Double lat;
private Double lng;
private List<OpeningHours> openingHours;
}
public class OpeningHours {
private String dayOfWeek;
private String from1;
private String to1;
}
Run Code Online (Sandbox Code Playgroud)
我的写作方法——
public void getStoreLocationData(List<StoreLocation> storeLocations) throws IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
try (
Writer writer = Files.newBufferedWriter(Paths.get(storeLocationDataCsv))
) {
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.build();
beanToCsv.write(storeLocations);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码完美生成所有列,除了开放时间列表。这是当前的输出-
我宁愿有一个开放时间列,并将每个开放时间安排为一个新行。就像是
或在营业时间列内的 json …
在我的手机昨晚更新之前,我的代码运行良好。我正在使用 opencsv 将手机存储中的 CSV 文件读取到我的应用程序中的数组中。这是代码...
public static String[] getFileContents(File file) {
String[] contentsArray = new String[500];
if(file.exists()) {
try {
CSVReader reader = new CSVReader(new FileReader(file));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.arraycopy(nextLine, 0, contentsArray, 0, nextLine.length);
}
} catch (Exception e) {
System.out.println("Failed file: " + file);
System.out.println("You are here and sad but at least the file exists");
e.printStackTrace();
}
} else {
System.out.println("File does not exist");
}
return contentsArray;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误...
I/System.out: Failed file: /storage/emulated/0/Documents/text/36-12644-Test …Run Code Online (Sandbox Code Playgroud) opencsv ×10
java ×7
csv ×4
hadoop ×2
hive ×2
android ×1
coldfusion ×1
create-table ×1
fgetcsv ×1
file ×1
hive-serde ×1
hiveql ×1
list ×1
php ×1
scandir ×1
supercsv ×1
writetofile ×1