Beheben Sie die Warnung: Verwendet oder überschreibt eine veraltete API in Java

Mehvish Ashiq 15 Februar 2024
Beheben Sie die Warnung: Verwendet oder überschreibt eine veraltete API in Java

Heute werden wir sehen, warum eine Warnung verwendet oder überschreibt eine veraltete API lautet, und demonstrieren, wie dies behoben werden kann, um die Aufgabe zu erfüllen.

Behebung der Warnung verwendet oder überschreibt eine veraltete API in Java

Beispielcode (der eine Warnung enthält):

// 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

In diesem Code greifen wir auf eine .txt-Datei zu, lesen diese Datei Zeile für Zeile und platzieren die Wörter in einem Array, das basierend auf einem einzigen Leerzeichen aufgeteilt wird. Dann zählen wir die Anzahl der Zeichen in jedem Wort und zeigen sie alle in der Programmausgabe an.

Obwohl dieses Programm die Ausgabe generiert, hebt es auch hervor, dass wir eine veraltete API in Zeile String line = dataInputStream.readLine(); verwenden oder überschreiben. Siehe Folgendes.

Warnung behoben, die besagt, dass eine veraltete API verwendet oder überschrieben wird – Readline ist veraltet

Diese Warnung wird mit der Methode readLine() der Klasse DataInputStream generiert. Laut der Dokumentation ist diese Methode seit JDK 1.1 veraltet, weil sie Bytes nicht richtig in Zeichen umwandelt.

Obwohl die Methode veraltet ist und in einigen Fällen wahrscheinlich wie erwartet funktioniert. Aber wir können nicht garantieren, dass es seine Aufgabe noch erfüllen wird.

Daher ist es gut, eine ähnliche, aber konsistente Methode zu verwenden.

Ab JDK 1.1 ist die bevorzugte Methode zum Lesen der Textzeilen die Funktion readLine() aus der Klasse BufferedReader. Wir müssen nicht den ganzen Code von Grund auf ändern, sondern nur die Klasse DataInputStream in die Klasse BufferedReader konvertieren.

Ersetzen Sie diese Codezeile:

DataInputStream dataInputStream = new DataInputStream(in);

Mit dieser Codezeile:

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

Das vollständige Arbeitsprogramm sieht nun wie folgt aus.

// 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

Wenn Sie außerdem etwas Ähnliches wie das Folgende sehen.

Recompile with -Xlint: deprecation for details

Mach dir keine Sorge; Es sagt Ihnen nur eine Option, die Sie beim Kompilieren verwenden können, um mehr Details darüber zu erhalten, wo Sie das veraltete Zeug verwenden.

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