JavaRush /Blog Java /Random-PL /Przerwa kawowa #229. Jak pracować z plikami i operacjami ...

Przerwa kawowa #229. Jak pracować z plikami i operacjami wejścia/wyjścia w Javie. Metody użytkowe klasy Objects

Opublikowano w grupie Random-PL

Jak pracować z plikami i operacjami wejścia/wyjścia w Javie

Źródło: Medium Ten samouczek wyjaśnia, jak tworzyć, czytać, zapisywać i usuwać pliki w Javie. Dowiesz się także, jak działają klasy File , OutputStream i OutputStream . Przerwa kawowa #229.  Jak pracować z plikami i operacjami wejścia/wyjścia w Javie.  Metody użytkowe klasy Objects - 1

Wstęp

W Javie pliki są reprezentowane przez klasę File . Klasa File udostępnia metody tworzenia, odczytywania, zapisywania i usuwania plików. Wejście/wyjście (I/O) to proces przesyłania danych pomiędzy programem a źródłem zewnętrznym, takim jak plik, gniazdo sieciowe lub konsola. Java udostępnia wiele klas wejścia/wyjścia, w tym klasy InputStream i OutputStream .

Tworzenie plików

Aby utworzyć plik, możesz użyć metody File.createNewFile() . Utworzy nowy plik, jeśli plik o tej samej nazwie jeszcze nie istnieje. Jeśli taki plik już istnieje, metoda createNewFile() zgłosi wyjątek IOException . Oto przykład tworzenia nowego pliku o nazwie myfile.txt w bieżącym katalogu:
File myFile = new File("myfile.txt");
myFile.createNewFile();

Czytanie plików

Aby odczytać plik w Javie, możesz użyć klasy FileInputStream . Zapewnia metody odczytu bajtów z pliku. Aby odczytać zawartość pliku należy skorzystać z metody read() . Ta metoda odczytuje jeden bajt z pliku i zwraca wartość tego bajtu. Na przykład poniższy kod odczytuje zawartość pliku myfile.txt i drukuje go na konsoli:
File myFile = new File("myfile.txt");
FileInputStream inputStream = new FileInputStream(myFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    System.out.print(new String(buffer, 0, bytesRead));
}
inputStream.close();

Nagrywanie plików

Aby zapisać do pliku, możesz użyć klasy FileOutputStream . Zapewnia metody zapisywania bajtów do pliku. Aby zapisać zawartość ciągu znaków do pliku, użyj metody write() . Ta metoda zapisuje określoną liczbę bajtów z określonej tablicy do pliku. Oto przykład zapisu ciągu „Hello, world!”. do pliku myfile.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();

Usuwanie plików

Aby usunąć plik w Javie, należy skorzystać z metody File.delete() . Jeśli plik, który chcesz usunąć, nie istnieje, metoda usuwania() zwróci wartość false . Oto przykład kodu usuwającego plik myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();

Wniosek

W tym poście omówiliśmy podstawy pracy z plikami i I/O Java. Nauczyłeś się tworzyć, czytać, zapisywać i usuwać pliki. Poznałeś także klasę File oraz klasy InputStream i OutputStream .

Metody użytkowe klasy Objects - jak z nimi pracować

Źródło: Inside Java Dzięki temu wpisowi poszerzysz swoją wiedzę na temat różnych metod dostępnych w klasie Objects . Klasa Objects w Javie posiada wiele metod użytkowych, które ułatwiają wykonywanie różnorodnych operacji na obiektach. Klasa Objects przeszła kilka aktualizacji w wydaniach JDK : bardzo istotne aktualizacje pojawiły się w JDK 8 i 9 oraz mniejsze aktualizacje w JDK 16 i 19. Przyjrzyjmy się, jak można używać klasy Objects .

Porównanie obiektów

Obiekty udostępnia kilka opcji porównywania wartości dwóch obiektów. Kluczową zaletą stosowania implementacji Objects jest bezpieczeństwo przed wystąpieniami null .

równa się()

Poniżej znajduje się przykład porównania dwóch rekordów.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime copyOfbilly =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
nullValue.equals(billy);//NPE
Objects.equals(nullValue, billy);// false
Objects.equals(billy, nicolai);// false
Objects.equals(billy, copyOfbilly);// true

głębokieEquals()

W klasie Objects możesz także użyć funkcji deepEquals() do porównania dwóch tablic . W przeciwieństwie do zwykłego równania() , spowoduje to porównanie wartości przechowywanych w tablicach, co powinno prowadzić do bardziej spójnych wyników. Zasadniczo ta metoda przechodzi przez Arrays.deepEquals() .
record RaceTime(String runnerName, Duration time) {}

RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

RaceTime[] raceTimes1 = new RaceTime[] { billy, nicolai };
RaceTime[] raceTimes2 = new RaceTime[] { billy, nicolai };

Objects.equals(raceTimes1, raceTimes2);// false
Objects.deepEquals(raceTimes1, raceTimes2);// true

porównywać()

Obiekty mają również metodę Compare() , która może przyjąć dwa obiekty i Comparator<T> . Metoda Compare() jest jedną z niewielu metod null -unsafe w obiektach , ponieważ nie daje akceptowalnego zwrotu, jeśli jeden z jej argumentów ma wartość null .
record RaceTime(String runnerName, Duration time) {}
class RaceTimeComparator implements Comparator<RaceTime> {
@Override
public int compare(RaceTime o1, RaceTime o2) {
	return o1.time.compareTo(o2.time);
}
}
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.compare(billy, nicolai, new RaceTimeComparator());//-1
Objects.compare(null, nicolai, new RaceTimeComparator());//NPE

Ciąg i HashCode

Klasa Objects udostępnia metody konwertowania obiektu na wartości String i HashCode . Ponownie, główną zaletą tych metod jest to, że są one bezpieczne przed wystąpieniami zerowymi .

Konwertuj na ciąg

Jedną z bardziej interesujących metod jest toString(obj, nullDefault) , która podaje wartość domyślną w przypadku wystąpienia błędu. Oznacza to, że toIdentityString(obj) zwraca toString() i hashCode() przekazanych obiektów tak, jakby żadna z tych metod nie została nadpisana.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.toString(billy);//RaceTime[runnerName=Billy Korando, time=PT1M30S]
Objects.toString(nullValue);//null
Objects.toString(nullValue, "Did not finish");//Did not finish
Objects.toIdentityString(billy);//ObjectsExamples$1RaceTime@251a69d7

Konwertuj na HashCode

Obiekty udostępniają także metody konwersji obiektu na jego wartość kodu skrótu.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.hashCode(nullValue);//0
Objects.hashCode(billy);//[HashValue]
Objects.hash(billy, nicolai);//[HashValue]

Sprawdzanie wartości null

Klasa Objects udostępnia kilka metod sprawdzania i obsługi null .

Zgłaszanie wyjątku NullPointException na null

Metoda requireNonNull(obj) zgłosi wyjątek NullPointException , jeśli przekazana wartość to null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName);
		time = Objects.requireNonNull(time);
	}
}

Zgłaszanie wyjątku NullPointException na null z komunikatem do użytkownika

Metoda requireNonNull(obj, String) zgłosi błąd NullPointException z komunikatem do użytkownika, jeśli przekazana wartość to null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, "runner name required!");
		time = Objects.requireNonNull(time, "race time required!");
	}
}

Zwróć wartość domyślną dla wartości null

Metoda requireNonNullElse(obj, defaultValue) zwróci przekazaną wartość defaultValue , jeśli obj ma wartość null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
		time = Objects.requireNonNullElse(time, Duration.ZERO);
	}
}

Korzystanie z dostawców

Klasa Objects udostępnia także metody requireNonNull(obj, Dostawca<String>) i T requireNonNullElseGet(T, Dostawca<T>) , których można użyć do dostarczenia komunikatu lub wartości domyślnej. Należy ich używać tylko wtedy, gdy utworzenie komunikatu lub wartości domyślnej miałoby znaczący wpływ na wydajność.
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameMsgSupplier = () -> "runner name required!";
static Supplier<String> noTimeMsgSupplier = () -> "race time required!";
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, noNameMsgSupplier);
		time = Objects.requireNonNull(time, noTimeMsgSupplier);
	}
}
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameValueSupplier = () -> "John Smith";
static Supplier<Duration> noTimeValueSupplier = () -> Duration.ZERO;
	RaceTime{
		runnerName = Objects.requireNonNullElseGet(runnerName, noNameValueSupplier);
		time = Objects.requireNonNullElseGet(time, noTimeValueSupplier);
	}
}

Predykcyjna kontrola zerowa

Obiekty zapewniają sprawdzanie wartości null do użycia w predykatach, chociaż można go również używać w innych scenariuszach.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
Objects.nonNull(nullValue);//false
Objects.isNull(nullValue);//true

Kontrola indeksu

Na koniec klasa Objects udostępnia kilka opcji sprawdzania pozycji indeksu podczas przechodzenia przez obiekt File , String , Collection lub podobny. Niektóre z tych metod zostały niedawno dodane do JDK 16.
int checkIndex(int index, int length)

int checkFromToIndex(int fromIndex, int toIndex, int length)

int checkFromIndexSize(int fromIndex, int size, int length)

long checkIndex(long index, long length)

long checkFromToIndex(long fromIndex, long toIndex, long length)

long checkFromIndexSize(long fromIndex, long size, long length)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION