使用java删除CSV数据

使用java删除CSV数据,java,php,csv,http,Java,Php,Csv,Http,我对php的CSV加载有问题。我的CSV包含http头,我需要在一个进程更新数据库后自动删除此信息。我还需要删除此CSV的列 我不知道如何从CSV中删除我的http头,也不知道如何删除此列 我可以使用以下代码阅读我的所有内容: public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException { String archCSV = System

我对php的CSV加载有问题。我的CSV包含http头,我需要在一个进程更新数据库后自动删除此信息。我还需要删除此CSV的列

我不知道如何从CSV中删除我的http头,也不知道如何删除此列

我可以使用以下代码阅读我的所有内容:

public static void main(String[] args) throws FileNotFoundException, IOException, 

CsvValidationException {
    String archCSV = System.getProperty("user.dir") + "\\MYLAR.csv";
    CSVReader csvReader = new CSVReader(new FileReader(archCSV));
    String[] fila = null;
    while((fila = csvReader.readNext()) != null) {
        System.out.println(fila[0]);
    }

    csvReader.close();
}
我得到了我所有的内容。在控制台中,我得到以下信息:

HTTP/1.1 200 OK
Date: Wed
Server: Apache/2.4.18 (Unix) OpenSSL/1.0.2g PHP/5.6.19 mod_perl/2.0.8-dev Perl/v5.16.3
Vary: Host
X-Powered-By: PHP/5.6.19
Pragma: public
Last-Modified: Wed
Cache-Control: no-store
Cache-Control: pre-check=0
Cache-Control: private
Content-Transfer-Encoding: none
Content-Disposition: attachment; filename="tarifa_general.csv
Content-Length: 1682234
Set-Cookie:
Content-Type: text/csv; charset=utf-8

CATEGORY_PATH;MANUFACTURER;ID_PRODUCT;PRODUCT;REFERENCE;REFERENCE_PARENT;STOCK;EAN13;SHORT_DESCRIPTION;PRICE_CUSTOMER
PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;1;"IMPRESORA EPSON LQ-2190";C11CA92001;;0;8715946459172;000003;910.33
如何删除我不想删除的http头和列

谢谢你的帮助

使用编辑;分隔符

public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException, CsvException {
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
    
    try (BufferedReader fileReader = Files.newBufferedReader(archCSV)) {

    // Skip HTTP Headers
    for (String line; (line = fileReader.readLine()) != null; )
        if (line.isEmpty())
            break; // Found end of HTTP Headers
    }

    CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
    try (BufferedReader br = Files.newBufferedReader(archCSV,  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();
            }
        }
}
解决方案

public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException, CsvException {
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
    

    CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
    try (BufferedReader br = Files.newBufferedReader(archCSV,  StandardCharsets.UTF_8);
                              
        CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).build()) {
        
        // Skip HTTP Headers
        for (String line; (line = br.readLine()) != null; )
            if (line.isEmpty())
                break; // Found end of HTTP Headers
       
            List<String[]> rows = reader.readAll();

            for (String[] row : rows) {
                for (String e : row) {
                    //System.out.format("%s ", e);
                    System.out.println(row[2]);
                }
                System.out.println();
            }
        }
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException、IOException、CsvValidationException、csveexception{
Path archCSV=Path.get(System.getProperty(“user.dir”),“MYLAR.csv”);
CSVParser parser=new CSVParserBuilder().withSeparator(“;”).build();
try(BufferedReader br=Files.newBufferedReader(archCSV,StandardCharsets.UTF_8);
CSVReader reader=新的CSVReaderBuilder(br)。带有csvparser(parser.build()){
//跳过HTTP头
for(字符串行;(line=br.readLine())!=null;)
if(line.isEmpty())
break;//找到HTTP头的结尾
列表行=reader.readAll();
for(字符串[]行:行){
for(字符串e:行){
//系统输出格式(“%s”,e);
System.out.println(第[2]行);
}
System.out.println();
}
}
}

HTTP头以空行结尾,因此要跳过HTTP头,请使用
BufferedReader
继续阅读,直到找到空行,然后将读卡器交给
CSVRReader

至于“删除”一列,没有必要,只要在读取数据时忽略该列即可

Path archCSV=Path.get(System.getProperty(“user.dir”),“MYLAR.csv”);
try(BufferedReader fileReader=Files.newBufferedReader(archCSV)){
//跳过HTTP头
for(字符串行;(line=fileReader.readLine())!=null;)
if(line.isEmpty())
break;//找到HTTP头的结尾
//阅读CSV内容
try(CSVReader CSVReader=新的CSVReader(文件阅读器)){
字符串[]fila=null;
while((fila=csvReader.readNext())!=null){
字符串col1=fila[0];
字符串col2=fila[1];
//跳过(“删除”)第3列
字符串col4=fila[3];
//代码在这里
}
}
}

Q:MYLAR.csv文件中包含的“无关行”,对吗?因此,理想情况下,您应该清理文件:修改生成文件的程序。是的是mylar.csv。但是我正在连接到远程URL以获取此文件,我无法访问以生成此CSV,只有我获取文件并使用此文件更新我的数据库OK:因此您被“坏”文件困住了:(建议:在“标题”和“好的CSV数据”之间似乎有一个空(“空白”)行也许你可以打电话,直到你打到空行。@ Adreas你的代码是完美的。坦克帮助我。当我阅读时,我怎么能忽略这个专栏?为什么我要做文件(1)?例如ArrayIndexOutOfBoundsException。很抱歉,这是我第一次在中阅读CSVprogramming@scorpions我已经向您展示了一个忽略列的示例,方法是不使用
fila[2]
中的值——至于
ArrayIndexOutOfBoundsException
,数据实际上不是CSV(逗号分隔的值),现在是吗?列之间用分号分隔,而不是用逗号分隔,因此您需要告诉CSVReader(如何操作请参阅文档)。我正在阅读openCSV的文档,我可以更改我的分隔符CSV,我不能读取我的CSV,但我不能删除我的http头另一个…我添加了新修改的实际代码。谢谢帮助me@scorpions当然,您的代码会打印HTTP头,因为您关闭并重新打开文件,开始从beginn读取ing。请再次查看此答案中的代码。只有一个对
文件的调用。newbufferedeader()
。我想我解决了我的问题,现在不显示http头,我可以访问第[2]行。现在我必须使用正确的数据创建一个新的CSV。谢谢帮助
public static void main(String[] args) throws FileNotFoundException, IOException, CsvValidationException, CsvException {
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
    

    CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
    try (BufferedReader br = Files.newBufferedReader(archCSV,  StandardCharsets.UTF_8);
                              
        CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).build()) {
        
        // Skip HTTP Headers
        for (String line; (line = br.readLine()) != null; )
            if (line.isEmpty())
                break; // Found end of HTTP Headers
       
            List<String[]> rows = reader.readAll();

            for (String[] row : rows) {
                for (String e : row) {
                    //System.out.format("%s ", e);
                    System.out.println(row[2]);
                }
                System.out.println();
            }
        }
}