【问题标题】:the constructor csvreader(reader char) is deprecated error构造函数 csvreader(reader char) 已弃用错误
【发布时间】:2018-10-24 19:10:41
【问题描述】:

我想用 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), ',');)

如何使此代码运行请帮助我,提前感谢您的帮助。我不想为我完成这件事,我只是卡住了,需要帮助找到我的方式。

【问题讨论】:

  • 我注意到您的问题仍然是“开放的”:您没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。

标签: java csv opencsv reader


【解决方案1】:

真正的答案在这里:

  • 您搜索术语已弃用
  • 然后您会发现:已弃用表示某些方法已被标记,因此您不应不再使用它(请参阅here
  • 注意应该:您仍然可以使用它,但该库的某些未来版本可能会删除该 ctor/方法,然后您的代码将无法编译任何more(意思是:上面是一个警告,理论上可以忽略)
  • 但是忽略是错误的方法。

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

已弃用。请改用 CSVReaderBuilder。

builder 类记录在 here,包括一个使用示例。

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

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

【讨论】:

  • 如何实现我的代码以使用 CSVReaderBuilder,我是 csv 阅读器的新手,请帮助我@ghostCat
  • 其实我的英语不是专家,我很困惑
  • @KenKaneki 抱歉,那我帮不上什么忙。我总是尝试使用简单的语言。核心是:使用 CSVReaderBuilder 类。单击最后的第三个链接,然后阅读!并搜索“已弃用”一词。做研究!
【解决方案2】:

这里是弃用代码的确切解决方案:

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

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

【讨论】:

  • 我也遇到了同样的问题并得到了上述解决方案。 @KenKaneki,如果它对你有用,请检查这个答案,谢谢。
【解决方案3】:

除非您专门尝试使用该 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

【讨论】:

  • 一个真正的 csv 阅读器正在做无数扫描仪没有做的事情。你的“答案”就像......我问你“去纽约的火车从哪里出发”然后你回来“你可以步行到纽约,离这里只有 100 英里”
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2017-05-02
  • 2013-10-28
  • 2021-09-10
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多