Java 8 및 Java 11에서 파일을 올바르게 읽는 방법
출처: Medium 이 튜토리얼을 통해 Java 8 및 Java 11에서 대용량 파일을 처리하고 읽을 때 유용한 몇 가지 팁을 배우게 됩니다. Java에서는 컴퓨터 디스크에 있는 파일을 읽는 것이 매우 간단합니다. Java 8 이상에서는 이 . 이는 파일 및 디렉토리 작업을 위한 보다 효율적인 방법을 제공하기 위해 Java 7에서 처음 도입된 java.nio.file 패키지 의 일부입니다. 다음은 Files 클래스를 사용하여 Java 8에서 파일을 읽는 방법의 예입니다 .import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileReader {
public static void main(String[] args) {
try {
Path path = Paths.get("file.txt");
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 예제에서는 Files.readAllLines() 메서드를 사용하여 파일의 모든 줄을 읽고 이를 List<String> 파일에 저장합니다 . Paths.get() 메서드는 파일을 나타내는 Path 객체를 만드는 데 사용됩니다 . 또한 Files.lines를 사용할 수도 있습니다 .
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Files;
public class FileReader {
public static void main(String[] args) {
try {
Files.lines(Paths.get("file.txt"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java 11에서는 파일을 읽으려면 readString() 메서드를 사용할 수 있으며 전체 파일을 문자열로 읽습니다. 사용 방법에 대한 예는 다음과 같습니다.
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileReader {
public static void main(String[] args) {
try {
Path path = Paths.get("file.txt");
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java에서 대용량 파일을 작업할 때 다음과 같은 몇 가지 지침을 염두에 두는 것이 중요합니다.
- 버퍼링된 리더를 사용하십시오 . 한 번에 한 문자나 한 줄을 읽는 대신 한 번에 많은 양의 데이터를 읽을 수 있습니다.
- 더 작은 버퍼 크기 사용 : 버퍼링된 판독기를 사용할 때 더 작은 버퍼 크기는 메모리 사용량을 줄이는 데 도움이 될 수 있습니다.
- 스트리밍 API를 사용하세요 . 전체 파일을 메모리에 로드하는 대신 스트리밍 API를 사용하면 파일을 부분적으로 읽을 수 있습니다.
- 특히 파일이 큰 경우 병렬 스레드를 사용하여 파일을 처리합니다 .
- 읽은 후 파일을 닫으십시오. 이렇게 하면 리소스를 확보하는 데 도움이 됩니다.
- 파일을 읽은 후 파일을 자동으로 닫으려면 try-with-resources 문을 사용하세요 . 이렇게 하면 파일을 읽는 동안 예외가 발생하더라도 파일이 닫히게 됩니다.
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.List;
public class FileReader {
public static void main(String[] args) {
try (BufferedReader reader = Files.newBufferedReader(Paths.get("file.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 예제에서는 try-with-resources 문 내에서 BufferedReader 개체 가 생성되어 예외가 발생하더라도 블록을 종료할 때 자동으로 닫힙니다. 따라서 Java에서 대용량 파일을 읽을 때는 버퍼 리더, 더 작은 버퍼 크기, 스트리밍 API, 병렬 스트림을 사용하고 파일을 읽은 후 닫는 것이 가장 좋습니다. 또한 try-with-resources 문을 사용하면 예외 발생 시 파일이 올바르게 닫히는지 확인하는 데 도움이 될 수 있습니다.
Java에서 목록을 정렬하는 방법. Java의 다양한 목록 정렬 방법
출처: FreeCodeCamp 이 게시물은 Java의 다양한 목록 정렬 방법인 Collections.sort() , stream.sorted() 및 List.sort() 를 다룹니다 . 때로는 데이터를 더 쉽게 이해하고, 찾고, 처리할 수 있도록 특정 순서로 정렬해야 하는 경우도 있습니다. 우리는 이 과정을 정렬이라고 부릅니다. 정렬을 사용하면 특정 순서뿐만 아니라 기준(예: 숫자, 문자열, 개체 등의 데이터 유형별)에 따라 데이터를 구성할 수 있습니다. Java 언어에는 예를 들어 Collections 클래스 에 정렬을 위한 내장 메소드가 있습니다 . Java 정렬은 사용자가 제품 목록을 표시해야 하는 전자 상거래 애플리케이션에서 자주 사용됩니다. 가격, 평점, 브랜드 등 사용자가 설정한 요구 사항에 따라 제품을 다양한 방식으로 정렬할 수 있습니다. 예를 들어, 사용자가 가격을 기준으로 오름차순으로 정렬된 모든 제품을 보려는 경우 애플리케이션은 정렬 알고리즘을 사용하여 제품을 해당 순서로 정렬할 수 있습니다. 이렇게 하면 사용자가 제품을 탐색할 때 가장 저렴한 제품을 먼저 보고 이에 따라 구매 결정을 내릴 수 있습니다.Java에서 Collections.Sort() 메서드를 사용하는 방법
Java에서 데이터를 정렬하는 가장 일반적인 방법 중 하나는 Collections.sort() 메서드를 사용하는 것입니다 . 기본적으로 목록은 오름차순으로 정렬됩니다. 다음은 Collections.sort() 메서드를 사용하여 정수 목록을 정렬하는 예입니다.import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(3);
numbers.add(1);
numbers.add(4);
numbers.add(2);
Collections.sort(numbers);
System.out.println("Sorted List: " + numbers);
}
}
위의 코드는 정수 목록을 생성하고 여기에 4개의 숫자를 추가한 다음 목록을 정렬한 다음 정렬된 목록을 콘솔에 인쇄합니다. Java 표준 라이브러리의 클래스를 사용하여 java.util.Collections , java.util.List 및 java.util.ArrayList를 포함한 작업을 수행합니다 . 출력은 다음과 같습니다.
//정렬된 목록 출력: [1, 2, 3, 4]
Collections.sort() 메서드를 사용하여 사용자 정의 개체 목록을 정렬할 수도 있습니다 . 이렇게 하려면 비교기를 생성하고 이를 Collections.sort() 메서드 에 인수로 전달해야 합니다 . 비교기는 java.util.Comparator 인터페이스를 구현하는 객체입니다 . 여기에는 두 객체를 비교하고 상대적 순서를 나타내는 정수를 반환하는 호출 가능한 단일 메서드인 Compare() 가 있습니다. 다음은 비교기를 사용하여 사용자 정의 개체 목록을 정렬하는 방법에 대한 예입니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
people.add(new Person("Charlie", 20));
Collections.sort(people, new PersonComparator());
System.out.println("Sorted List: " + people);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
class PersonComparator implements java.util.Comparator<Person> {
@Override
public int compare(Person a, Person b) {
return a.getAge() - b.getAge();
}
}
위에 표시된 코드는 Person 객체 목록을 만들고 , 여러 Person 객체를 목록에 추가하고, 사용자 정의 비교기( PersonComparator ) 를 사용하여 목록을 정렬한 다음 정렬된 목록을 인쇄합니다. Person 클래스 에는 name 및 age 라는 두 개의 필드 와 이러한 필드에 대한 getter 메서드가 있습니다. PersonComparator 클래스는 Comparator 인터페이스를 구현 하고 비교 메서드를 재정의하여 Person 개체를 연령( age )별로 정렬합니다 . 이 프로그램의 출력은 다음과 같습니다:
//정렬된 목록 출력: [찰리(20), 앨리스(25), 밥(30)]
Collections.sort() 메서드는 하나 이상의 필드를 기준으로 정렬하려는 개체 컬렉션이 있는 경우 가장 적합합니다. 예를 들어, Employee 객체 컬렉션이 있고 이를 성별로 정렬하려는 경우 Collections.sort() 메서드를 사용하고 Employee 객체 의 성을 비교하는 사용자 정의 비교기를 전달할 수 있습니다 .
Java에서 List.Sort() 메서드를 사용하는 방법
이 방법은 목록을 오름차순으로 정렬합니다. 작동 방식은 다음과 같습니다.import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 2, 4, 1);
numbers.sort(null);
System.out.println(numbers); // prints [1, 2, 3, 4, 5]
}
}
기본 메소드 내에서 Arrays.asList는 숫자 라는 정수 목록을 생성합니다 . 그런 다음 null이 정렬 메서드에 전달 되므로 코드는 기본 정렬 메서드를 사용하여 이 숫자 목록을 정렬합니다 . 마지막으로 정렬된 목록은 System.out.println 메서드 를 사용하여 콘솔에 인쇄됩니다 . 출력은 [1, 2, 3, 4, 5] 입니다 . List.sort()는 정렬해야 하는 요소 목록이 있을 때 유용합니다. 예를 들어 문자열 목록이 있고 이를 알파벳순으로 정렬하려는 경우 List.sort () 메서드를 사용하면 됩니다 . List.sort() 는 List 클래스 의 인스턴스 메소드 이며 자연 순서 또는 지정된 Icomparer 구현 에 따라 결정된 순서로 요소를 정렬합니다 .
Java에서 stream.sorted() 메소드를 사용하는 방법
Java 8 이상에서는 Stream API를 사용하여 목록을 정렬할 수 있습니다. 이는 스트림의 요소를 정렬하는 데 사용할 수 있는 sorted 메서드를 제공합니다. 다음은 스트림을 사용하여 정수 목록을 정렬하는 방법에 대한 예입니다.import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 2, 4, 1);
List<Integer> sortedList = numbers.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList); // prints [1, 2, 3, 4, 5]
}
}
보시다시피 숫자 목록은 stream() 메서드를 사용하여 스트림으로 변환됩니다 . 그런 다음 sorted() 메서드가 호출되어 스트림의 요소를 정렬합니다 . Collect(Collectors.toList()) 메소드는 정렬된 요소를 다시 목록으로 수집하는 데 사용됩니다. 결과는 정렬된 요소를 포함하는 새 목록입니다. 출력은 [1, 2, 3, 4, 5] 입니다 . stream.sorted()는 정렬해야 하는 요소의 스트림이 있을 때 가장 잘 사용됩니다. 예를 들어 정수 스트림이 있고 이를 오름차순으로 정렬하려는 경우 이 에 대해 stream.Sorted() 메서드를 사용하는 것이 더 좋습니다 .
GO TO FULL VERSION