构造函数 csvreader(读取器字符)已弃用错误



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

我怎样才能使这段代码运行,请帮助我,提前感谢您的任何帮助。我不想为我完成这件事,我只是被困住了,需要帮助找到我的路。

真正的答案在这里:

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

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

荒废的。请改用CSVReaderBuilder。

此处记录了该生成器类,包括一个用法示例。

除此之外:如果您确实收到错误(例如您的 IDE 告诉您这是一个错误(,那是因为您配置了 IDE 设置,将此警告标记为错误(因此这又是您很容易影响自己的事情(。

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

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

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

您可以只使用扫描仪,除非您专门尝试使用该 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

最新更新