首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java编写CSV数据

用Java编写CSV数据
EN

Stack Overflow用户
提问于 2020-11-05 12:16:08
回答 1查看 484关注 0票数 1

我正在尝试在读取和提取数据后自动生成的新CSV中写入数据。然而,总是只写一个记录,它没有我想要的格式。我希望列中的数据,如果我有id,制造商,product_name,价格,这些信息应该在不同的列中,但是我的结果是:

然而,在为其他人开发的其他脚本MDB中,当转换此CSV时,他的格式是:

代码语言:javascript
复制
51645A-C    11.86   21  INFOWORK    CARTUCHO COMPATIBLE CON HP 45 51645A NEGRO  
http://recursos.infowork.es/img/000/084/000084322.jpg
C13T04014020-C  1.01    3   INFOWORK    CARTUCHO COMPATIBLE CON EPSON C62-CX3200 NEGRO  http://recursos.infowork.es/img/000/084/000084593.jpg

我需要这种Java格式,让我的进程自动更新我的数据库。为什么?现在,我使用一个脚本进行转换,然后需要重新保存结果。

我的实际代码是:

代码语言:javascript
复制
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()) {
        
        String col1 = "";
        String col2 = "";
        String col3 = "";
        String col4 = "";
        String col5 = "";
        String col6 = "";
        String col7 = "";
        String col8 = "";
        
        // Skip HTTP Headers
        for (String line; (line = br.readLine()) != null; )
            if (line.isEmpty())
                break; // Found end of HTTP Headers
       
            String[] fila = null;
            while((fila = reader.readNext()) != null) {
                col1 = fila[0]; //path
                col2 = fila[1]; //fabricante
                col3 = fila[2]; //ID_PRODUCT
                col4 = fila[3]; // producto
                col5 = fila[4]; //referencia
                col6 = fila[6]; //stock
                col7 = fila[7]; //EAN13
                col8 = fila[9]; //PRECIO
                
                File file = new File("MYLAR2.CSV"); 
                try { 
                    // create FileWriter object with file as parameter 
                    FileWriter outputfile = new FileWriter(file); 

                    // create CSVWriter object filewriter object as parameter 
                    CSVWriter writer = new CSVWriter(outputfile); 

                    // adding header to csv 
                    String[] header = { "Fabricante", "ID_PRODUCT", "PRODUCTO", "REFERENCIA", "STOCK", "EAN13", "PRECIO"}; 
                    writer.writeNext(header); 
                    String[] data1 = new String[fila.length];
                    // add data to csv 
                    for(int i = 1; i<fila.length; i++){
                        data1[i] = fila[i];
                    }
                    writer.writeNext(data1); 
                    
                    /*String[] data2 = { "Suraj", "10", "630" }; 
                    writer.writeNext(data2); */

                    // closing writer connection 
                    writer.close(); 
                } 
                catch (IOException e) { 
                    // TODO Auto-generated catch block 
                    e.printStackTrace(); 
                } 
                
                // code here
            }
        }
}

我写的转换结果只有一个结果,当CSV有很多结果时。

更新

原始文件Mylar

代码语言:javascript
复制
    HTTP/1.1 200 OK
Date: Wed, 04 Nov 2020 10:33:57 GMT
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, 04 Nov 2020 10:35:38 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: pre-check=0, post-check=0, max-age=0
Cache-Control: private
Content-Transfer-Encoding: none
Content-Disposition: attachment; filename="tarifa_general.csv"
Content-Length: 1682234
Set-Cookie: 6bc890cb7b5704cff62e4f70e6f2fe91=xjqG7DAXpIyCS%2FBGEFwnApzYUWiwlkMqmx9ULY%2FdgW%2FMqfHk4mNo67rgSQp10%2FacRlHCinJUyWAv0B%2FInmAGaiyJ0ro5yf2yNl1O9tKx50M%3D000074; expires=Tue, 24-Nov-2020 10:33:57 GMT; Max-Age=1727899; path=/; domain=www.mylar.es; httponly
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
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;3;"IMPRESORA EPSON LX-1170 II";C11C641001;;0;8715946316963;000008;428.91
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;4;"IMPRESORA EPSON FX-890 II";C11C524025;;0;8715946333137;000012;595.29
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;5;"IMPRESORA EPSON FX-2190";C11C526022;;0;8715946204420;000013;714.87
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;6;"IMPRESORA EPSON LQ-680 PRO";C11C376125;;0;8715946333205;000021;664.98
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;8;"IMPRESORA EPSON LQ-630";C11C480019;;0;8715946538068;000025;498.67
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;11;"IMPRESORA EPSON LQ-690";C11CA13041;;0;8715946429939;000091;583.8
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;12;"IMPRESORA EPSON LX-350";C11CC24031;;0;8715946502939;000092;171.23
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;17;"SCANNER EPSON WORKFORCE DS-7500N";B11B205331BT;;0;8715946510705;000157;1063.95
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > ACCESORIOS";EPSON;18;"TRACTOR PUSH/PULL ( FX-2190 )  C12C800212*";C12C800212;;0;0;000230;59.54
"PERIFÉRICOS > TERMINAL PUNTO VENTA (TPV) > IMPRESORAS TICKETS";EPSON;19;"IMPRESORA EPSON TMU-950 PARALELO BLANCA";C31C176252LG;;0;8715946367842;000248;512.8
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;21;"IMPRESORA EPSON ACULASER COLOR C2800N";C11CA09001BZ;;0;8715946403878;000251;294.51
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;22;"IMPRESORA EPSON EPL-6200N";C11C533011BR;;0;9314020599675;000254;168.41
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;24;"SCANNER EPSON PERFECTION V500 OFFICE ADF";B11B189081;;0;8715946448664;000257;194.32
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > LASER";EPSON;25;"IMPRESORA EPSON ACULASER M 7000N";C11CB61011;;0;8715946311173;000264;0
"PERIFÉRICOS > SCANNERS > EPSON";EPSON;26;"SCANNER EPSON GT-S55";B11B209301BT;;0;8715946490922;000266;381.92
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > EPSON > MATRICIALES";EPSON;51;"IMPRESORA EPSON LQ-350";C11CC25001;;0;8715946521886;000854;188.01
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";KINGSTON;68;"PENDRIVE KINGSTON 32GB  USB 2.0";32GB;;0;740617297737;001439;3.29
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";;77;"PENDRIVE INTEGRAL 64GB* USB 2.0";"INFD64GBPASBLS  PEN64GB";;0;5055288427822;001460;7.34
"CONSUMIBLES > ALMACENAMIENTO > MEMORIAS USB / PENDRIVES";TOSHIBA;79;"PENDRIVE TOSHIBA  16GB  USB 2.0";"THN U202";;0;4047999400226;001498;3.91
"PERIFÉRICOS > IMPRESORAS / FAX > IMPRESORAS > BROTHER > ACCESORIOS";BROTHER;81;"DISCO DURO BROTHER 10 GB PARA  HL4000CN";HD40CL;;0;4977766603645;001677;411.4

与使用mdb脚本开发的其他脚本相比,脚本的结果是:

代码语言:javascript
复制
C11CA92001  910.33  0   MYLAR   IMPRESORA EPSON LQ-2190
C11C641001  428.91  0   MYLAR   IMPRESORA EPSON LX-1170 II
C11C524025  595.29  0   MYLAR   IMPRESORA EPSON FX-890 II
C11C526022  714.87  0   MYLAR   IMPRESORA EPSON FX-2190
C11C376125  664.98  0   MYLAR   IMPRESORA EPSON LQ-680 PRO
C11C480019  498.67  0   MYLAR   IMPRESORA EPSON LQ-630
C11CA13041  583.8   0   MYLAR   IMPRESORA EPSON LQ-690
C11CC24031  171.23  0   MYLAR   IMPRESORA EPSON LX-350
B11B205331BT    1063.95 0   MYLAR   SCANNER EPSON WORKFORCE DS-7500N
C12C800212  59.54   0   MYLAR   TRACTOR PUSH/PULL ( FX-2190 )  C12C800212*
C31C176252LG    512.8   0   MYLAR   IMPRESORA EPSON TMU-950 PARALELO BLANCA
C11CA09001BZ    294.51  0   MYLAR   IMPRESORA EPSON ACULASER COLOR C2800N
C11C533011BR    168.41  0   MYLAR   IMPRESORA EPSON EPL-6200N
B11B189081  194.32  0   MYLAR   SCANNER EPSON PERFECTION V500 OFFICE ADF
C11CB61011  0   0   MYLAR   IMPRESORA EPSON ACULASER M 7000N
B11B209301BT    381.92  0   MYLAR   SCANNER EPSON GT-S55
C11CC25001  188.01  0   MYLAR   IMPRESORA EPSON LQ-350
32GB    3.29    0   MYLAR   PENDRIVE KINGSTON 32GB  USB 2.0
INFD64GBPASBLS  PEN64GB 7.34    0   MYLAR   PENDRIVE INTEGRAL 64GB* USB 2.0
THN U202    3.91    0   MYLAR   PENDRIVE TOSHIBA  16GB  USB 2.0
HD40CL  411.4   0   MYLAR   DISCO DURO BROTHER 10 GB PARA  HL4000CN
FAX2845 159.2   0   MYLAR   FAX BROTHER 2845 LASER CON AURICULAR

我需要这种格式(up)

的实际代码结果是:

代码语言:javascript
复制
    Fabricante,"ID_PRODUCT","PRODUCTO","REFERENCIA","STOCK","EAN13","PRECIO"
 ,"MANUFACTURER","ID_PRODUCT","PRODUCT","REFERENCE","REFERENCE_PARENT","STOCK","EAN13","SHORT_DESCRIPTION","PRICE_CUSTOMER"
    ,"EPSON","1","IMPRESORA EPSON LQ-2190","C11CA92001","","0","8715946459172","000003","910.33"
    ,"EPSON","3","IMPRESORA EPSON LX-1170 II","C11C641001","","0","8715946316963","000008","428.91"
    ,"EPSON","4","IMPRESORA EPSON FX-890 II","C11C524025","","0","8715946333137","000012","595.29"
    ,"EPSON","5","IMPRESORA EPSON FX-2190","C11C526022","","0","8715946204420","000013","714.87"
    ,"EPSON","6","IMPRESORA EPSON LQ-680 PRO","C11C376125","","0","8715946333205","000021","664.98"
    ,"EPSON","8","IMPRESORA EPSON LQ-630","C11C480019","","0","8715946538068","000025","498.67"
    ,"EPSON","11","IMPRESORA EPSON LQ-690","C11CA13041","","0","8715946429939","000091","583.8"
    ,"EPSON","12","IMPRESORA EPSON LX-350","C11CC24031","","0","8715946502939","000092","171.23"

解释

我不能传递公司分销商的完整CSV文件,我已经传递了一些示例行,这些行应该给出​​的概念,整个文件是什么样的。不管怎样,我会尽量让它更清楚..。更新后的第一个示例是我的原始mylar文件。有一位前开发人员用MDB编写了一个脚本,该脚本将其转换为第一个示例,它是从分发服务器到第二个示例的原始代码.最后,使用我当前的java脚本,我得到了第三个示例。我需要把自己作为第二个例子。我有西班牙语和英语术语,因为供应商的CSV就是这样来的.我需要做的是用这些CSV自动更新数据库,但为此,我必须转换它们,以获得脚本中的数据,但保留CSV,就像MDB脚本中的示例一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-06 09:55:06

因此,csv有一个标头,而mdb没有,而后者似乎是正常的文本文件。下面的代码同时写入文本文件和csv文件,如果有什么我不理解的东西,您可以自定义它。

代码语言:javascript
复制
    Path archCSV = Paths.get(System.getProperty("user.dir"), "MYLAR.csv");
        CSVParser parser = new CSVParserBuilder().withSeparator(';').build();
        File fileCsv = new File("MYLAR2.CSV");
        File fileTxt = new File("MYLAR2.txt");
        try (BufferedReader br = Files.newBufferedReader(archCSV, StandardCharsets.UTF_8);
                CSVReader reader = new CSVReaderBuilder(br).withCSVParser(parser).withSkipLines(1).build();
                FileWriter outputfile = new FileWriter(fileCsv);
                CSVWriter writer = new new CSVWriter(outputfile, ' ', ' ', ' ', ICSVWriter.DEFAULT_LINE_END)) { //mind the single space between the simgle quotes '*space*'

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

            List<String[]> toCsv = new ArrayList<>();
            List<String[]> filas = reader.readAll(); // use this if the file is  not gigantic
            for(String[] line : filas) {
                if(line.length == 0) 
                    continue;
                
                String[] app = new String[5];
                for(int i = 0; i < line.length; i++) {
                    app[0] = line[4];
                    app[1] = line[9];
                    app[2] = line[6];
                    app[3] = "MYLAR";
                    app[4] = line[3];
                }
                toCsv.add(app);
                
            }
            
            writer.writeAll(toCsv); // only one IO Operation
        }
    }

更新的输出

代码语言:javascript
复制
 C11CA92001   910.33   0   MYLAR   IMPRESORA  EPSON  LQ-2190 
 C11C641001   428.91   0   MYLAR   IMPRESORA  EPSON  LX-1170  II 
 C11C524025   595.29   0   MYLAR   IMPRESORA  EPSON  FX-890  II 
 C11C526022   714.87   0   MYLAR   IMPRESORA  EPSON  FX-2190 
 C11C376125   664.98   0   MYLAR   IMPRESORA  EPSON  LQ-680  PRO 
 C11C480019   498.67   0   MYLAR   IMPRESORA  EPSON  LQ-630  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64697026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档