构造函数csvreader(reader char)是不推荐使用的错误

问题描述 投票:1回答:3

我想用servlet将文件CSV上传到MySQL,我有这样的代码,我的代码出错了。

package ServToDb;

import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

import com.opencsv.CSVReader;


import Connection.Database;

@WebServlet("/ImportCSVtoDB")
public class ImportCSVtoDB extends HttpServlet {
    private static final long serialVersionUID = 1L;       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ImportCSVtoDB() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String target_file ;  // fileThatYouWantToFilter
        File folderToScan = new File("C:/Users/DELL/Music/"); //  this is the path we are scanning        
        File[] listOfFiles = folderToScan.listFiles();// this is the list of files returned in this folder       
        for (int j = 0; j < listOfFiles.length; j++) { // for each file in the folder
            if (listOfFiles[j].isFile()) {
                target_file = listOfFiles[j].getName();
                if (target_file.equals("blog.csv")) { // look for the file. You can also check if it ends with csv etc.              
            try 
            {
                Database db = new Database(); 
                String loadQuery = "LOAD DATA LOCAL INFILE 'C:/Users/DELL/Music/csvtest.csv' INTO TABLE" 
                        + "importcsv FIELDS TERMINATED BY ','LINES TERMINATED BY '\n' (fname, sex) "; //remember to change the path here as well
                Statement stmt = db.dbConn().createStatement();
                stmt.execute(loadQuery);                            
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }                   
            try (CSVReader reader = new CSVReader(new FileReader("C:/Users/DELL/Music/" + target_file), ',');)
            {
                Database db = new Database();
                String insertQuery = "Insert into importcsv (fname, sex) values (?,?)";//write your insertion query
                PreparedStatement pstmt = db.dbConn().prepareStatement(insertQuery);
                String[] rowData = null;// create empty array which will hold values from csv
                while((rowData = reader.readNext()) != null)
                {
                    int i = 0;
                    for (String data : rowData)
                        {
                        i++; 
                            if (i<3) {
                                pstmt.setString(i, data);
                                    if (i == 2) {
                                        pstmt.addBatch();// add batch
                                    }
                                    if (i % 30 == 0)// insert when the batch size is 10
                                        {
                                        pstmt.executeBatch(); // execute queries
                                        }
                            }
                        }
                }

            }
            catch (Exception e) {
                e.printStackTrace();}
                }
            }
        }
        out.println("success");
    }
}

但我得到这样的错误。

The constructor CSVReader(Reader, char) is deprecated

从第60行

try (CSVReader reader = new CSVReader(new FileReader("C:/Users/DELL/Music/" + target_file), ',');)

如何运行此代码请帮助我,提前感谢您的帮助。我不打算为我做这件事,我只是陷入困境,需要帮助找到我的方式。

java csv opencsv reader
3个回答
2
投票

真正的答案在这里:

  • 您搜索已弃用的术语
  • 然后你会发现:不赞成意味着某些方法被标记出来以便你不再使用它(参见here
  • 注意应该:你仍然可以使用它,但是库的一些未来版本可能会删除那个ctor /方法,然后你的代码将不再编译(意思是:上面是一个警告,理论上你可以忽略它)
  • 但忽略是错误的做法。

相反:你转向你正在使用的类(可能是here)的javadoc,找到:

已过时。请改用CSVReaderBuilder。

并且该构建器类记录了here,包括一个用法示例。

除此之外:如果你真的得到一个错误(比如你的IDE告诉你这是一个错误),那就是因为你的IDE配置设置的方式是这个警告被标记为错误(所以这又是你可以影响的事情)你很容易)。

最后:这里真正的答案是不要放下你不理解的代码。看起来你从某个地方获得了代码,并且你开始使用它,而没有做任何研究究竟该代码在做什么。这是一种效率低下的方法。您想要了解源代码中的每个和字符。如果你不理解某些东西,那么你研究它,直到你理解它为止。这就是你学习编程的方式。


0
投票

以下是已弃用代码的确切解决方案:

CSVParser csvParser = new CSVParserBuilder().withSeparator(',').build();

CSVReader reader = new CSVReaderBuilder(new FileReader("C:/Users/DELL/Music/" + 
target_file)).withCSVParser(csvParser).build();

-2
投票

除非您专门尝试使用该CSV读取器包,否则您可以使用扫描仪?

Scanner scanner = new Scanner("fileName.csv"); //open the file
while(scanner.hasNextLine()) { //Iterate through the file
    String line = scanner.nextLine(); //grab the next line
    String[] lineParts = line.split(","); //split based on commas and do something with the data
}
scanner.close(); //close the file
© www.soinside.com 2019 - 2024. All rights reserved.