Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将单记录csv文件读入类字段的编程成语

将单记录csv文件读入类字段的编程成语
EN

Stack Overflow用户
提问于 2012-06-15 01:51:10
回答 1查看 451关注 0票数 0

假设我想读取以下文件:

代码语言:javascript
运行
AI代码解释
复制
TestFile;100

进入全班的字段:

代码语言:javascript
运行
AI代码解释
复制
public class MyReader { 
    String field1;
    Integer field2;
}

阅读内容有两种稍微不同的方式:

公共类MyReader {

代码语言:javascript
运行
AI代码解释
复制
public void loadValues(File file) throws IOException {

    //a generic method that reads the content file to a string throwing an IOException
    String line = readFileToString(file);
    String[] values = line.split(";");

    field1=values[0];
    field2=Integer.parseInt(values[1]);

}

//then i'll have well known getters:

public String getField1() {
  return field1;
} 

public Integer getField2() {
  return field2;
}

现在第二个成语是:

代码语言:javascript
运行
AI代码解释
复制
private String[] values; //made the values a class field

public void loadValues(File file) throws IOException {

    //a generic method that reads the content file to a string throwing an IOException
    String line = readFileToString(file);

    values = line.split(";");

}

public String getField1() {
  return values[0]
} 

public Integer getField2() {
  return Integer.parseInt(values[1]);
}

最大的区别在于异常管理。我故意忽略了在这两种情况下可能发生的两个运行时异常:

如果文件包含少于两个fields

  • NumberFormatException (如果整数解析失败

),则为

优先逼近

所有字段都在启动时加载。只要其中一个不能被解析,我就得到了NumberFormatException。如果字段少于所需的字段,我将得到超出界限的异常。这听起来不错,尤其是如果我想确保所有字段值的正确性,我将使用特定的字段值:失败快速范例。假设我有100个字段,该记录包含一个错误,该错误将被记录到一个文件中以进行故障排除。实际上,这段代码提供了如下内容:

代码语言:javascript
运行
AI代码解释
复制
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

也就是说:我得到了错误,导致错误的值,给出错误的行号,而不是字段名。对开发人员有好处,对通常无法访问源代码的系统engeneer没有好处。

第二次逼近

字段只有在通过getter访问时才被“提取”并从数据字符串中解析。在相同的情况下,每个getter可能返回上述两个错误。有一定程度的“容错”,而不是“快速失败范式”。如果记录的第100字段包含不正确的值,但类的客户端不调用它的getter,则永远不会抛出异常。另一方面,当调用不正确值的getter时,记录的异常将包含导致问题的字段的信息(在堆栈跟踪中):

代码语言:javascript
运行
AI代码解释
复制
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)

at com.test.MyReader.getField2(MyReader.java:39)

at com.test.MyReader.test(MyReader.java:33)
at com.test.MyReader.main(MyReader.java:16)

问题

这两种方法各有优缺点,人们可以说,所采用的决定取决于环境。问题如下:

  • getter和setter是javabeans的主题。在这两种方法中返回exceptions?
  • the类显然具有相同的接口,这是“可接受的”,但是由于它们具有完全不同的异常架构,因此客户端应该以完全不同的方式使用它们。那么如何向客户展示这一事实呢?也许getter的语义是误导性的,也许还有更雄辩的方法??

EN

回答 1

Stack Overflow用户

发布于 2012-06-15 02:00:10

首先,当您将values[]数组存储为局部变量时,第二种方法将无法工作,其他函数也无法访问它(在您的示例中是getter)。

第二,不要将异常抛出在getter中,因为您公开的api将具有误导性,并且不符合任何约定。

第三,与其自己解析字符串,不如考虑使用准备好的库进行csv解析,而不是重新发明轮子,例如。http://opencsv.sourceforge.net/

第四,为csv记录创建一个简单的POJO对象,您可以在为每个字段分配值的同时检查错误,然后抛出异常,提供默认值等等。

希望这有帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11048399

复制
相关文章
python pandas读取csv文件_pandas将数据写入csv
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175441.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
6.1K0
python pandas读取csv文件_pandas将数据写入csv
解析不规则csv文件文件帮助类
public class SplitHelper { /// <summary> /// 拓展分割 /// </summary> /// <param name="StrOneCsv">传入csv字符串</param> /// <returns></returns> public string[] ExpandSplit(string StrOneCsv) { StrOneCsv += ","; ArrayList ar
opengps
2018/04/13
1K0
将DataTable转换成CSV文件
该文介绍了如何将DataTable转换成CSV文件的方法,包括使用C#和StreamWriter等工具。
彭泽0902
2018/01/04
1.5K0
使用Java Scanner类解析CSV文件
如果你查看Scanner的API,你会发现该类支持文件和输入流作为输入方式,本例中我们采用文件的方式。
明明如月学长
2021/08/27
1.2K0
python爬虫将数据写入csv文件乱码
养成习惯,先赞后看!!! 出现乱码根本原因就是编码方式不对,但是博主自己尝试了三种编码方式终于找到了最合适的。
萌萌哒的瓤瓤
2020/08/26
4K0
python爬虫将数据写入csv文件乱码
Python 将数据写入文件(txt、csv、excel)
一、将列表数据写入txt、csv、excel 1、写入txt def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') for i in range(len(data)): s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择 s = s.replace
菲宇
2019/07/31
41.4K0
将Python网络爬虫的数据追加到csv文件
前几天在Python白银交流群有个叫【邓旺】的粉丝问了一个将Python网络爬虫的数据追加到csv文件的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
2K0
将Python网络爬虫的数据追加到csv文件
支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)
csv(Comma Separated Values)逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须象二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。CSV是一种Excel表格的导出格式,在Excel表格的菜单栏中点击文件->另存为会弹出一个文件夹浏览窗口,在下拉框中可以选择保存格式,其中有一个就是.CSV(逗号分隔符)选项。 CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。 “CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
lulianqi
2018/08/30
3.3K0
【python】读取csv xlsx xlx txt文件 类
只需修改path class Reader: """ 可读取的文件格式: .csv .tsv .xlsx .xlx .txt """ @staticmethod def change_1d_array(array, header_cut=None, str_to_float=None): """ 为一维数组去掉第一个值;将字符串转为数值 :param array: type:<class 'numpy.ndarray'
司六米希
2022/11/15
1.1K0
利用脑记录产生的合成语音
这项研究是由语音科学家GopalaAnumanchipalli和Chang实验室的生物工程研究生Josh Chartier领导。该项研究是基于一系列研究基础上进行研究的,首次描述了人类大脑的语音中心是如何编排嘴唇,下巴,舌头,和其他声道组件的运动以生产流利的语音。
脑机接口社区
2020/07/01
5130
利用脑记录产生的合成语音
如何将多个csv文件合并到一个csv中
1、将所有的csv文件放到一个文件夹,比如D:/test中有a.csv,b.csv,c.csv,d.csv,f.csv
ytkah
2020/06/10
12K0
如何将多个csv文件合并到一个csv中
Java工具集-Csv文件读取工具类
添加依赖 <!--开源的opencsv--> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.6</version> </dependency> 代码示例 import java.io.FileInputStream; import java.io.FileNot
cwl_java
2020/05/01
2K0
利用Python批量将csv文件转化成xml文件
将 csv 格式转换成xml格式有许多方法,可以用数据库的方式,也有许多软件可以将 csv 转换成xml。但是比较麻烦,本文利用 Python 一键批量将 csv 文件转化成 xml 文件。
叶庭云
2021/12/01
1.7K0
利用Python批量将csv文件转化成xml文件
将文件夹中的文件信息统计写入到csv中
今天在整理一些资料,将图片的名字信息保存到表格中,由于数据有些多所以就写了一个小程序用来自动将相应的文件夹下的文件名字信息全部写入到csv文件中,一秒钟搞定文件信息的保存,省时省力!
小海怪的互联网
2019/09/18
9.3K0
CSV文件
CSV文件:Comma-Separated Values,中文叫,逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分割。每条记录由字段组成,字段间的分隔符是其他字符或者字符串。所有的记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。 用文本文件、EXcel或者类似与文本文件的都可以打开CSV文件。
狼啸风云
2020/02/11
2.6K0
使用python将csv文件快速转存到mysql
因为一些工作需要,我们经常会做一些数据持久化的事情,例如将临时数据存到文件里,又或者是存到数据库里。
我被狗咬了
2019/09/23
6.3K0
使用python将csv文件快速转存到mysql
python 读取单文件夹中的图片文件信息保存到csv文件中
# -*- coding: utf-8 -*- # @Time : 2019-09-17 10:21 # @Author : scyllake import os import csv #要读取的文件的根目录 root_path=r'C:\Users\zjk\Desktop\整理后的图片' #将所有目录下的文件信息放到列表中 def get_Write_file_infos(path): # 文件信息列表 file_infos_list=[] # 遍历并写入文件信息
小海怪的互联网
2019/10/14
5.7K0
基础知识 | 使用 Python 将数据写到 CSV 文件
我们从网上爬取数据,最后一步会考虑如何存储数据。如果数据量不大,往往不会选择存储到数据库,而是选择存储到文件中,例如文本文件、CSV 文件、xls 文件等。因为文件具备携带方便、查阅直观。
猴哥yuri
2018/08/16
1.9K0
点击加载更多

相似问题

将CSV文件读入__init__类中的字段?

24

将csv文件中的日期字段读入数据

13

将CSV读入类列表

12

调用将csv文件读入servlet的类方法

20

将csv文件读入csv文件的末尾

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文