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