경고 수정: Java에서 더 이상 사용되지 않는 API 사용 또는 재정의

Mehvish Ashiq 2024년2월15일
경고 수정: Java에서 더 이상 사용되지 않는 API 사용 또는 재정의

오늘, 우리는 경고가 더 이상 사용되지 않는 API를 사용하거나 재정의합니다라고 말하는 이유를 알아보고 작업을 수행하기 위해 이를 수정하는 방법을 보여줍니다.

Java에서 더 이상 사용되지 않는 API를 사용하거나 재정의합니다라는 경고 메시지 수정

예제 코드(경고 포함):

// import libraries
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

// Main class
public class Main {
  // main method
  public static void main(String[] args) {
    // path of a text file
    File filePath = new File("Files/TestFile.txt");
    try {
      // obtain input bytes from a file
      FileInputStream fileInputStream = new FileInputStream(filePath);
      // adds the functionality to another input stream
      BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
      // lets an app read primitive Java data types from the specified input stream
      DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);

      if (dataInputStream.available() != 0) {
        // Get a line.
        String line = dataInputStream.readLine();
        // Place words to an array which are split by a "space".
        String[] stringParts = line.split(" ");
        // Initialize the word's maximum length.
        int maximumLength = 1;

        // iterate over each stingPart, the next one is addressed as "stringX"
        for (String stringX : stringParts) {
          // If a document contains the word longer than.
          if (maximumLength < stringX.length())
            // Set the new value for the maximum length.
            maximumLength = stringX.length();
        } // end for-loop

        // +1 because array index starts from "0".
        int[] counter = new int[maximumLength + 1];
        for (String str : stringParts) {
          // Add one to the number of words that length has
          counter[str.length()]++;
        }
        // We are using this kind of loop because we require the "length".
        for (int i = 1; i < counter.length; i++) {
          System.out.println(i + " letter words: " + counter[i]);
        } // end for-loop
      } // end if statement
    } // end try
    catch (IOException ex) {
      ex.printStackTrace();
    } // end catch
  } // end main method
} // end Main class

이 코드에서는 .txt 파일에 액세스하고 해당 파일을 한 줄씩 읽고 단일 공백을 기준으로 분할된 단어를 배열에 배치합니다. 그런 다음 각 단어의 문자 수를 세고 프로그램 출력에 모두 표시합니다.

이 프로그램은 출력을 생성하지만 String line = dataInputStream.readLine(); 줄에서 더 이상 사용되지 않는 API를 사용하거나 재정의하고 있음을 강조합니다. 다음을 참조하십시오.

지원 중단된 API를 사용하거나 재정의한다는 경고 수정 - readline은 지원 중단됨

이 경고는 DataInputStream 클래스의 readLine() 메소드를 사용하여 생성됩니다. 문서에 따르면 이 메서드는 바이트를 문자로 제대로 변환하지 않기 때문에 JDK 1.1부터 사용되지 않습니다.

그러나 이 메서드는 더 이상 사용되지 않으며 경우에 따라 예상대로 수행될 수 있습니다. 그러나 우리는 그것이 더 이상 그 역할을 수행할 것이라고 보장할 수 없습니다.

따라서 유사하지만 일관된 방법을 사용하는 것이 좋습니다.

JDK 1.1부터 텍스트 줄을 읽는 데 선호되는 방법은 BufferedReader 클래스의 readLine() 함수입니다. 처음부터 모든 코드를 변경할 필요는 없지만 DataInputStreamBufferedReader 클래스로 변환하기만 하면 됩니다.

다음 코드 줄을 바꿉니다.

DataInputStream dataInputStream = new DataInputStream(in);

이 코드 줄을 사용하여:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));

이제 완전한 작업 프로그램은 다음과 같습니다.

// import libraries
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

// Main class
public class Main {
  // main method
  public static void main(String[] args) {
    // path of a text file
    File filePath = new File("Files/TestFile.txt");
    try {
      // obtain input bytes from a file
      FileInputStream fileInputStream = new FileInputStream(filePath);
      // adds the functionality to another input stream
      BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
      // lets an app read primitive Java data types from the specified input stream
      // DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);
      BufferedReader bufferedReader =
          new BufferedReader(new InputStreamReader(bufferedInputStream));

      String line = "";
      // get a line and check if it is not null
      if ((line = bufferedReader.readLine()) != null) {
        // Place words to an array which are split by a "space".
        String[] stringParts = line.split(" ");
        // Initialize the word's maximum length.
        int maximumLength = 1;

        // iterate over each stingPart, the next one is addressed as "stringX"
        for (String stringX : stringParts) {
          // If a document contains the word longer than.
          if (maximumLength < stringX.length())
            // Set the new value for the maximum length.
            maximumLength = stringX.length();
        } // end for-loop

        // +1 because array index starts from "0".
        int[] counter = new int[maximumLength + 1];
        for (String str : stringParts) {
          // Add one to the number of words that length has
          counter[str.length()]++;
        }
        // We are using this kind of loop because we require the "length".
        for (int i = 1; i < counter.length; i++) {
          System.out.println(i + " letter words: " + counter[i]);
        } // end for-loop
      } // end if statement
    } // end try
    catch (IOException ex) {
      ex.printStackTrace();
    } // end catch
  } // end main method
} // end Main class

또한 다음과 유사한 내용도 표시되는 경우.

Recompile with -Xlint: deprecation for details

괜찮아요; 더 이상 사용되지 않는 항목을 사용하는 위치에 대한 자세한 정보를 얻기 위해 컴파일하는 동안 사용할 옵션을 알려줍니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook