如何在 Java 8 和 Java 11 中正确读取文件
来源:Medium 通过本教程,您将学习一些在 Java 8 和 Java 11 中处理和读取大文件时有用的技巧。 在 Java 中读取位于计算机磁盘上的文件非常简单。在 Java 8 及更高版本中,您可以使用Files类来实现此目的。它是java.nio.file包的一部分,该包最初在 Java 7 中引入,以提供更有效的方式处理文件和目录。下面是如何使用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> file 中。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 中对 List 进行排序。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);
}
}
上面的代码创建一个整数列表,向其中添加四个数字,对列表进行排序,然后将排序后的列表打印到控制台。它使用 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接口并重写比较方法以按年龄 ( age ) 对Person对象进行排序。该程序的输出将如下所示:
//输出排序列表:[Charlie (20), Alice (25), Bob (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]
}
}
在main方法中,Arrays.asList创建一个称为numbers的整数列表。然后,代码使用默认排序方法对该数字列表进行排序,因为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