我正在使用 OpenCSV 库来拆分我的 CSV 文件。现在我需要绝对确定地检测分隔符/分隔符。我在网上搜索过,但我只找到了一些例子,你可以创建一个候选人列表并尝试其中一个。我认为这不是最好的方法,因为您可能会出错。我的拆分器应该可以在任何 CSV(我无法控制)上正常工作,因此它必须尽可能通用。有没有人有好的解决方案?
我想将 8 个整数存储到 .csv 文件中(文件名将作为 EditText 的输入)并在需要时检索它们。
是否有可能在现有的csv文件中添加一个新列,意味着
现有文件
userid,name
1,Jim
2,Sally
3,Bob
Run Code Online (Sandbox Code Playgroud)
修改后的输出文件
userid,name,time
1,Jim,64913824823208
2,Sally,64913824900056
3,Bob,64913824966956
Run Code Online (Sandbox Code Playgroud)
提前致谢
我将数据附加到 csv 的最后一行。我想删除现有的行,然后用附加的元素重写它。有没有办法删除csv中的行?我正在使用 opencsv 来读取和写入文件。我尝试使用 CSVIterator 类。但是,迭代器似乎不支持 remove() 操作。这是我尝试过的代码:
static String[] readLastRecord(File outputCSVFile) throws WAGException {
checkArgument(outputCSVFile != null, "Output CSV file cannot be null");
FileReader fileReader = null;
CSVReader csvFileReader = null;
CSVIterator csvIterator = null;
String[] csvLastRecord = null;
try {
fileReader = new FileReader(outputCSVFile);
csvFileReader = new CSVReader(fileReader, ',', '\'',
csvRowCount - 1);
csvIterator = new CSVIterator(csvFileReader);
while (csvIterator.hasNext()) {
csvLastRecord = csvIterator.next();
csvIterator.remove();
}
} catch (IOException ioEx) {
throw new WAGException(
WAGInputExceptionMessage.FILE_READ_ERR.getMessage());
} finally { …Run Code Online (Sandbox Code Playgroud) On my company's site we have some tables that we need to export to a csv file.
There are some varying parameters, so the csv file needs to be dynamically created on request.
My problem is that after clicking to download, the response hangs, and waits for the whole file to be created (which can take some time) and only then downloads the entire file in one instant.
I'm using AngularJS, so I'm using window.location = <url_for_file_download> In order to …
我正在尝试使用库编写一个简单的CSVWriter代码OpenCSV,但遇到了一个奇怪的问题。
代码:
public class Test {
public static void main(String[] args) throws IOException {
String[] header = {"ONE", "\"TWO\"", "\"THREE\"", "\"FOUR\""};
CSVWriter writer = new CSVWriter(new FileWriter("C:/test.csv"), '|', CSVWriter.NO_QUOTE_CHARACTER);
writer.writeNext(header);
writer.flush();
writer.close();
}
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
ONE|"TWO"|"THREE"|"FOUR"
实际输出:
ONE|""TWO""|""THREE""|""FOUR""
正如我们所看到的,TWO、THREE 和 FOUR 周围有双引号,但在输出中双引号是重复的。
我不想要这个,已经尝试了几个选项和CSVWriter类的构造函数,但无法解决这个问题。
有人遇到过类似的问题或知道出路吗?
谢谢
我正在尝试使用 OpenCSV 解析 CSV 文件。其中一列以 YAML 序列化格式存储数据,并用引号引起来,因为其中可以包含逗号。它里面也有引号,所以通过加两个引号来转义。我可以在 Ruby 中轻松解析该文件,但使用 OpenCSV 我无法完全解析它。它是一个UTF-8编码的文件。
这是我的 Java 片段,它试图读取文件
CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(csvFilePath), "UTF-8"), ',', '\"', '\\');
Run Code Online (Sandbox Code Playgroud)
以下是该文件中的 2 行。我猜第一行没有被正确解析,并且""[Fair Trade Certified]""由于转义双引号而被分割。
1061658767,update,1196916,Product,28613099,Product::Source,"---
product_attributes:
-
- :name: Ornaments
:brand_id: 49120
:size: each
:alcoholic: false
:details: ""[Fair Trade Certified]""
:gluten_free: false
:kosher: false
:low_fat: false
:organic: false
:sugar_free: false
:fat_free: false
:vegan: false
:vegetarian: false
",,2015-11-01 00:06:19.796944,,,,,,
1061658768,create,,,28613100,Product::Source,"---
product_id:
retailer_id:
store_id:
source_id: 333790
locale: en_us
source_type: Product::PrehistoricProductDatum
priority: 1
is_definition:
product_attributes: …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Java读取1,000,000行 CSV 文件。我正在使用 OpenCSV 库,它在30,000行的较小文件上运行良好。不到半秒即可处理完毕。但是当我尝试读取一百万行文件时,它永远不会完成。
现在我测试了一下,看看它什么时候会真正停止,通过使用我自己的二分搜索版本,我首先尝试读取500k行,然后是250k,依此类推,我发现它很容易读取145k行,在0.5- 0.7秒,而150k甚至还没有完成。
我已经彻底搜索过,找到了我在代码中使用的几种解决方案,例如 usingBufferedReader等BufferedInputStream,但没有一个解决了这个问题。但在145-150k行之间仍然失败。
这是我的代码的相关部分(将150000 与 145000交换是导致程序在 <1 秒内执行的原因):
try {
// BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("myFile.csv"));
CSVReader csvReader = new CSVReader(new InputStreamReader
(new BufferedInputStream(new FileInputStream("myFile.csv"), 8192 * 32)));
try {
int count = 0;
String[] line;
long timeStart = System.nanoTime();
while((line = csvReader.readNext()) != null){
count ++;
if(count >= …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 ResultSet 对象转换为 CSV 格式的 String 对象。我尝试使用 OpenCV 将其转换为 CSV 文件,但我需要将其作为字符串。有一个选项可以先将其转换为文件,然后将数据转换为字符串,然后删除文件,但这将是我无法承受的额外开销。
有没有办法实现它,我尝试搜索但到目前为止还没有任何东西。
我正在使用带有嵌套 bean 结构的 OpenCSV。但是,我需要一个自定义转换器来实现这一点(目前专注于写入 csv 部分)。我环顾四周,但没有找到任何示例来帮助我弄清楚如何使其工作。
我尝试扩展我的子 bean 类,并在主文档中提供了一些转换。但是我的资源已经用完了,我来得最远的是让它抛出一个 CsvBadConverterException。
让我告诉你我有什么。(User 和 UserScore 都实现了 Serializable,以防万一。)父 bean:User
@CsvBindByName(column = "username")
private String userName;
@CsvBindByName(column = "password")
private String userPassword;
@CsvBindByName(column = "rememberPassword")
private boolean rememberPassword;
@CsvBindByName(column = "rememberUser")
private boolean rememberUser;
@CsvCustomBindByName(column = "scores", converter = UserScoreToBean.class)
private UserScore userScore;
// Constructors, getters, setters, and other methods
Run Code Online (Sandbox Code Playgroud)
子 bean:UserScore
@CsvBindByName(column = "totalScore")
private int totalScore;
@CsvBindByName(column = "currentScore")
private int currentScore;
@CsvBindByName(column = "highestStreak")
private int highestStreak;
// Even more basic …Run Code Online (Sandbox Code Playgroud)