конструктор csvreader (читатель char) устарел ошибка - PullRequest
0 голосов
/ 15 мая 2018

Я хочу загрузить файл 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), ',');)

Как мне запустить этот код, пожалуйста, помогите мне, заранее спасибо за любую помощь.Я не собираюсь делать это для меня, я просто застрял и мне нужна помощь, чтобы найти дорогу.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Реальный ответ здесь:

  • вы ищете термин устарел
  • вы потом узнаете: устарел означает, что некоторыеметод помечен так, что вы не должны больше его не использовать (см. здесь )
  • обратите внимание на следует : вы все еще можете использовать его,но какая-то будущая версия библиотеки может удалить этот ctor / метод, и тогда ваш код больше не будет компилироваться (имеется в виду: предупреждение , и теоретически вы можете проигнорироватьэто)
  • но игнорирование - неправильный подход.

Вместо этого: вы обращаетесь к javadoc для используемого вами класса (вероятно, здесь ), чтобы найти:

Устаревший.Пожалуйста, используйте вместо этого CSVReaderBuilder.

И этот класс builder задокументирован здесь , включая пример использования.

Помимо этого: если вы действительно получаете ошибку (как ваша IDE говорит вам, что это ошибка), то это потому, что вы настроили настройку IDE таким образом, что это предупреждение помечено как ошибка (так что это снова то, на что вы могли бы легко повлиять на себя).

Наконец: реальный ответ здесь - не записывать код, который вы не понимаете.Кажется, вы откуда-то получили код и начали его использовать, не исследуя , что именно делает этот код.Это неэффективный подход.Вы хотите понять каждый и символ в вашем исходном коде.Если вы чего-то не понимаете, тогда вы исследуете это , пока не поймете это.Так ты учишь программирование.

0 голосов
/ 16 апреля 2019

Вот точное решение для устаревшего кода:

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

CSVReader reader = new CSVReaderBuilder(new FileReader("C:/Users/DELL/Music/" + 
target_file)).withCSVParser(csvParser).build();
0 голосов
/ 15 мая 2018

Вы можете просто использовать сканер, если вы специально не пытаетесь использовать этот пакет для чтения 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
...