构造函数 csvreader(reader char) 已弃用错误

Ken*_*eki 2 java csv opencsv reader

我想用 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到这样的错误。

The constructor CSVReader(Reader, char) is deprecated
Run Code Online (Sandbox Code Playgroud)

从第 60 行

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

我如何才能运行此代码,请帮助我,在此先感谢您的帮助。我不想为我完成这件事,我只是被卡住了,需要帮助找到我的路。

Gho*_*ica 6

真正的答案在这里:

  • 您搜索术语已弃用
  • 然后您会发现:已弃用意味着某些方法已被标记,因此您不应再使用它(请参阅此处
  • 请注意应该:您仍然可以使用它,但该库的某些未来版本可能会删除该构造函数/方法,然后您的代码将不再编译(意思是:以上是一个警告,理论上您可以忽略它)
  • 但忽视是错误的做法。

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

已弃用。请改用 CSVReaderBuilder。

构建器类记录在此处,包括使用示例。

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

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


Raj*_*pta 5

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

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

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