• Java基础(三)


    前言:前面主要涉及到java的基本语法,接下来本篇博客主要记录Java中Collections类、泛型、以及File类、IO流的学习。

    目录

    数据结构

    泛型

    集合

    分类

    Collection的分类

    collection常用方法

    collection遍历方式

    迭代器

    for循环

    Lambda表达式

    List集合

    特点

    增删改查

    List集合的遍历方式

    for循环

    迭代器

    增强for循环(for)

    Lambda表达式

    ArrayList集

    底层原理

    适合场景

    LinkedList集合

    底层原理

    应用场景

    设计队列

    栈

    Set集合

    特点

    HashSet

    底层原理

    适用场景

    LinkedHashSet

    底层原理

    适用场景

    TreeSet

    底层原理

    适用场景

    Map集合

    特点

    常用方法

    遍历方式

    for循环

    键找值

    Lambda表达式

    File

    常用方法

    递归

    递归应用-搜索文件

    字符集

    IO流

    IO流体系

    字节流

    FileInputStream(文件字节输入流)

    每次读取一个字节

    每次读取多个字节 

    一次性全都读完全部字节

    OutputStream FileOutputStream(文件字节输出流)

    拷贝文件

    释放资源

    try-catch-finally

    try-with-resource

    实用场景

    字符流

    每次读取一个字符

    每次读取多个字符

    FileWriter(文件字符输出流)

    适用场景


    数据结构

    数据结构是组织数据的方式,数据结构+算法=程序。

    数组是一种基本的数据结构。

    基础的数据结构:List、Set、Queue、Map,比较高级的有Tree、Heap。

    泛型

    英文名:generics

    List ret = new ArrayList<>()

    什么是泛型?

    推荐阅读下面的这篇文章。

    还不知道泛型是什么?这一篇深入浅出泛型教学! - 知乎 (zhihu.com) 

    集合

     集合,是没有顺序的。

    import java.util.Collection;

    分类

    单列集合 colleciton

    双列集合 Map

    Collection的分类

    接口 Collection

    List 

    • ArrayList
    • LinkedList

    Set

    • HashSet
      • LinkedHashSet
    • TreeSet

    List系列集合:添加的元素是有序、可重复、有索引

    ArrayList、LinkedList:有序、可重复、有索引

    Set系列集合:添加的元素是无序、不重复、无索引

    • HashSet:无序、不重复、无索引
    • LinkedHashSet:有序、不重复、无索引
    • TreeSet:按大小默认升序排序、不重复、无索引

    collection常用方法

    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.Arrays;
    4. import java.util.Collection;
    5. import java.util.List;
    6. public class ListMrjj {
    7. public static void main(String[] args) {
    8. List List = new ArrayList<>();
    9. //添加元素
    10. List.add("mrjj");
    11. List.add("test");
    12. List.add("wy");
    13. // 获取集合的大小
    14. System.out.println(List.size());
    15. //判断集合是否包含某个元素 精确匹配
    16. System.out.println(List.contains("wy"));
    17. System.out.println(List.contains("WY"));
    18. //移除第3个元素
    19. System.out.println(List.remove(2));
    20. System.out.println(List);
    21. //获取特定索引的元素
    22. System.out.println(List.get(0));
    23. //修改指定索引的元素
    24. System.out.println(List.set(0, "Mrjj"));
    25. System.out.println(List);
    26. //集合转为数组
    27. Object[] arr = List.toArray();
    28. System.out.println(Arrays.toString(arr));
    29. //集合中的数据都是字符串
    30. String[] arr2 = List.toArray(new String[List.size()]);
    31. System.out.println(Arrays.toString(arr2));
    32. //清空集合
    33. List.clear();
    34. //判断集合是否为空
    35. System.out.println(List.isEmpty());
    36. //将其中一个集合的数据加入另一个集合中
    37. Collection c1 = new ArrayList<>();
    38. c1.add("test1");
    39. c1.add("test2");
    40. Collection c2 = new ArrayList<>();
    41. c2.add("test_a");
    42. c2.add("test_b");
    43. c1.addAll(c2);
    44. System.out.println(c1);
    45. System.out.println(c2);
    46. }
    47. }

    collection遍历方式

    迭代器

    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. public class ListLearn {
    6. public static void main(String[] args) {
    7. List List = new ArrayList<>();
    8. List.add("learning");
    9. List.add("wyLearning");
    10. List.add("test");
    11. List.add("wy");
    12. List.add("wangying");
    13. List.add("wyy");
    14. Iterator it = List.iterator();
    15. while (it.hasNext()) {
    16. String name = it.next();
    17. System.out.println(name);
    18. }
    19. }
    20. }

    for循环

    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class ListLearn {
    5. public static void main(String[] args) {
    6. List List = new ArrayList<>();
    7. List.add("learning");
    8. List.add("wyLearning");
    9. List.add("test");
    10. List.add("wy");
    11. List.add("wangying");
    12. List.add("wyy");
    13. for (int i = 0; i < List.size(); i++) {
    14. String s = List.get(i);
    15. System.out.println(s);
    16. }
    17. }
    18. }

    Lambda表达式

    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class ListLearn {
    5. public static void main(String[] args) {
    6. List List = new ArrayList<>();
    7. List.add("learning");
    8. List.add("wyLearning");
    9. List.add("test");
    10. List.add("wy");
    11. List.add("wangying");
    12. List.add("wyy");
    13. //可简写成 List.forEach(System.out::println)
    14. List.forEach(s -> {
    15. System.out.println(s);
    16. });
    17. }
    18. }

    List集合

    特点

    List系列集合:添加的元素是有序、可重复、有索引

    ArrayList、LinkedList:有序、可重复、有索引

    增删改查

    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class ListMrjj {
    5. public static void main(String[] args) {
    6. List List = new ArrayList<>();
    7. List.add("mrjj");
    8. List.add("test");
    9. List.add("wy");
    10. System.out.println(List);
    11. System.out.println(List.remove(2));
    12. System.out.println(List);
    13. System.out.println(List.get(0));
    14. System.out.println(List.set(0, "Mrjj"));
    15. System.out.println(List);
    16. }
    17. }

    List集合的遍历方式

    for循环
    1. package learn11;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class ListLearn {
    5. public static void main(String[] args) {
    6. List List = new ArrayList<>();
    7. List.add("learning");
    8. List.add("test");
    9. List.add("wy");
    10. for (int i = 0; i < List.size(); i++) {
    11. String s = List.get(i);
    12. System.out.println(s);
    13. }
    14. }
    15. }
    迭代器
    1. Iterator it = List.iterator();
    2. while (it.hasNext()){
    3. System.out.println(it.next());
    4. }
    增强for循环(for)
    1. for (String s : List) {
    2. System.out.println(s);
    3. }
    Lambda表达式
    1. List.forEach(s->{
    2. System.out.println(s);
    3. });

    数据结构,存储组织数据的方式是不同的。

    ArrayList集

    底层原理

    基于数组实现的

    数组的特点

    根据索引查询数据是比较快的

    删除、添加效率较低

    适合场景

    根据索引查询数据

    不适合场景:

    数据量较大时,需要频繁的增删操作

    LinkedList集合

    底层原理

    基于双链表

    特点:

    查询慢,增删相对较快,首尾元素进行增删改查的速度是极快的

    应用场景
    设计队列

    设计队列(队列,先进先出、后进后出)

    实现一个队列

    1. package learn11;
    2. import java.util.LinkedList;
    3. public class ListQueue {
    4. public static void main(String[] args) {
    5. LinkedList queue = new LinkedList<>();
    6. queue.addLast("第1个人");
    7. queue.addLast("第2个人");
    8. queue.addLast("第3个人");
    9. queue.addLast("第4个人");
    10. queue.addLast("第5个人");
    11. queue.addLast("第6个人");
    12. System.out.println(queue);
    13. queue.removeFirst();
    14. queue.removeFirst();
    15. queue.removeFirst();
    16. System.out.println(queue);
    17. }
    18. }

     

    栈

    进入栈:压栈、进栈(push)

    离开栈:弹栈、出栈(pop)

    1. package learn11;
    2. import java.util.LinkedList;
    3. public class ListQueue {
    4. public static void main(String[] args) {
    5. LinkedList stack = new LinkedList<>();
    6. stack.addFirst("第1颗子弹");
    7. stack.addFirst("第2颗子弹");
    8. stack.addFirst("第3颗子弹");
    9. stack.addFirst("第4颗子弹");
    10. stack.addFirst("第5颗子弹");
    11. stack.addFirst("第6颗子弹");
    12. System.out.println(stack);
    13. System.out.println(stack.removeFirst());
    14. System.out.println(stack.removeFirst());
    15. System.out.println(stack.removeFirst());
    16. System.out.println(stack);
    17. }
    18. }
    1. package learn11;
    2. import java.util.LinkedList;
    3. public class ListQueue {
    4. public static void main(String[] args) {
    5. LinkedList stack = new LinkedList<>();
    6. stack.push("第1颗子弹");
    7. stack.push("第2颗子弹");
    8. stack.push("第3颗子弹");
    9. stack.push("第4颗子弹");
    10. stack.push("第5颗子弹");
    11. stack.push("第6颗子弹");
    12. System.out.println(stack);
    13. System.out.println(stack.pop());
    14. System.out.println(stack.pop());
    15. System.out.println(stack.pop());
    16. System.out.println(stack);
    17. }
    18. }

    实际上,push方法就是调用的addFirst方法,pop方法调用的removeFirst方法

     

     

     

    Set集合

    特点

    Set系列集合:添加的元素是无序、不重复、无索引

    • HashSet:无序、不重复、无索引
    • LinkedHashSet:有序、不重复、无索引
    • ++++:按大小默认升序排序、不重复、无索引

    HashSet

    1. package learn11;
    2. import java.util.HashSet;
    3. import java.util.Set;
    4. public class SetLearn {
    5. public static void main(String[] args) {
    6. Set set = new HashSet<>();
    7. set.add(23);
    8. set.add(67);
    9. set.add(24);
    10. set.add(74);
    11. set.add(33);
    12. set.add(23);
    13. System.out.println(set);
    14. }
    15. }

    哈希值

    一个int类型的数值,java中每个对象都有一个哈希值

    java中的所有对象,都可以调用Object类提供的hashCode方法,返回该对象自己的哈希值

    public int hashcode():返回对象的哈希码值

    底层原理

    基于哈希表实现

    哈希表是一种增删改查数据,性能都较好的数据结构

    适用场景

    不需要存储重复元素,不需要排序,无索引

    LinkedHashSet

    1. package learn11;
    2. import java.util.LinkedHashSet;
    3. import java.util.Set;
    4. public class SetLearn {
    5. public static void main(String[] args) {
    6. Set set = new LinkedHashSet<>();
    7. set.add(23);
    8. set.add(67);
    9. set.add(24);
    10. set.add(74);
    11. set.add(33);
    12. set.add(23);
    13. System.out.println(set);
    14. }
    15. }

    底层原理

    基于哈希表实现的

    每个元素都额外多了一个双链表的机制记录前后元素的位置

    适用场景

    需要记住元素的添加顺序,无重复元素存储,增删改查都快

    TreeSet

    1. package learn11;
    2. import java.util.Set;
    3. import java.util.TreeSet;
    4. public class SetLearn {
    5. public static void main(String[] args) {
    6. Set set = new TreeSet<>();
    7. set.add(23);
    8. set.add(67);
    9. set.add(24);
    10. set.add(74);
    11. set.add(33);
    12. set.add(23);
    13. System.out.println(set);
    14. }
    15. }

    底层原理

    自定义排序规则

    适用场景

    需要对元素进行排序,没有重复元素需要存储,增删改查都快

    Map集合

    键值对集合

    键不能重复

    Map

    HashMap

    LinkedHashMap

    TreeMap

    特点

    Map系列集合的特点都是由键决定的

    HashMap:无序、不重复、无索引

    LinkedHashMap:有序、不重复、无索引

    TreeMap:按照大小默认升序排序、不重复、无索引

    常用方法

    1. package learn11;
    2. import java.util.Collection;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class MapLearn {
    7. public static void main(String[] args) {
    8. Map map = new HashMap<>();
    9. map.put("test1", 170.0);
    10. map.put("test2", 160.0);
    11. map.put("test3", 150.0);
    12. map.put("test4", 140.0);
    13. map.put("test5", 130.0);
    14. System.out.println(map);
    15. System.out.println(map.size());
    16. //根据键获取值
    17. System.out.println(map.get("test1"));
    18. //找不到返回null
    19. System.out.println(map.get("wy"));
    20. //根据键删除元素
    21. map.remove("test5");
    22. System.out.println(map);
    23. //判断是否包含某个键
    24. System.out.println(map.containsKey("test3"));
    25. //判断是否包含某个值
    26. System.out.println(map.containsValue(170.0));
    27. // map.clear();
    28. System.out.println(map);
    29. System.out.println(map.isEmpty());
    30. //获取所有键
    31. Set keys = map.keySet();
    32. System.out.println(keys);
    33. //获取所有值
    34. Collection values = map.values();
    35. System.out.println(values);
    36. //将其他map集合的数据倒入集合中
    37. Map map1 = new HashMap<>();
    38. map1.put("python1",10);
    39. map1.put("python2",20);
    40. Map map2 = new HashMap<>();
    41. map2.put("java1",10);
    42. map2.put("java2",20);
    43. map1.putAll(map2);
    44. System.out.println(map1);
    45. System.out.println(map2);
    46. }
    47. }

    遍历方式

    for循环
    1. package learn11;
    2. import java.util.Collection;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class MapLearn {
    7. public static void main(String[] args) {
    8. Map map = new HashMap<>();
    9. map.put("test1", 170.0);
    10. map.put("test2", 160.0);
    11. map.put("test3", 150.0);
    12. map.put("test4", 140.0);
    13. map.put("test5", 130.0);
    14. Set keys = map.keySet();
    15. for (String key : keys) {
    16. double value = map.get(key);
    17. System.out.println(key + "==>" + value);
    18. }
    19. }
    20. }
    键找值
    1. package learn11;
    2. import java.util.Collection;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class MapLearn {
    7. public static void main(String[] args) {
    8. Map map = new HashMap<>();
    9. map.put("test1", 170.0);
    10. map.put("test2", 160.0);
    11. map.put("test3", 150.0);
    12. map.put("test4", 140.0);
    13. map.put("test5", 130.0);
    14. Set> entries = map.entrySet();
    15. for (Map.Entry entry : entries) {
    16. System.out.println(entry);
    17. }
    18. map.forEach((k, v) -> {
    19. System.out.println(k + "->" + v);
    20. });
    21. }
    22. }
    Lambda表达式
    1. package learn11;
    2. import java.util.HashMap;
    3. import java.util.Map;
    4. public class MapLearn {
    5. public static void main(String[] args) {
    6. Map map = new HashMap<>();
    7. map.put("test1", 170.0);
    8. map.put("test2", 160.0);
    9. map.put("test3", 150.0);
    10. map.put("test4", 140.0);
    11. map.put("test5", 130.0);
    12. map.forEach((k,v) -> {
    13. System.out.println(k+"->"+v);
    14. });
    15. }
    16. }

    File

    常用方法

    只能删除空文件夹

    1. package learn11;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.text.SimpleDateFormat;
    5. public class FileLearn {
    6. public static void main(String[] args) throws IOException {
    7. File f1 = new File("D:"+File.separator+"qq\\QQWhatsnew.txt");
    8. System.out.println(f1.getName());
    9. System.out.println(f1.length());
    10. File f2 = new File("D:"+File.separator+"qq");
    11. System.out.println(f2.length());
    12. String[] names = f2.list();
    13. for(String name:names){
    14. System.out.println(name);
    15. }
    16. File[] files = f2.listFiles();
    17. for(File file:files){
    18. System.out.println(file.getAbsolutePath());
    19. }
    20. File f3 = new File("src\\learn");
    21. System.out.println(f3.length());
    22. System.out.println(f3.getName());
    23. System.out.println(f1.isDirectory());
    24. System.out.println(f1.isFile());
    25. long time = f1.lastModified();
    26. SimpleDateFormat sdf = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
    27. System.out.println(sdf.format(time));
    28. System.out.println(f3.getPath());
    29. System.out.println(f3.getAbsolutePath());
    30. File f4 = new File("D:/testwy.txt");
    31. System.out.println(f4.createNewFile());
    32. File f5 = new File("D:/a/b/c");
    33. System.out.println(f5.mkdirs());
    34. System.out.println(f4.delete());
    35. System.out.println(f5.delete());
    36. System.out.println(f5.delete());
    37. System.out.println(f5.delete());
    38. }
    39. }

    递归

    典型例子,求阶乘

    1. package learn11;
    2. public class jc {
    3. public static void main(String[] args) {
    4. System.out.println(f(5));
    5. }
    6. public static int f(int n) {
    7. if (n == 1) {
    8. return 1;
    9. } else {
    10. return f(n - 1) * n;
    11. }
    12. }
    13. }

    递归应用-搜索文件

    1. package learn11;
    2. import java.io.File;
    3. public class SearchLearn {
    4. public static void main(String[] args) {
    5. searchFile(new File("D:/"), "QQ.exe");
    6. }
    7. public static void searchFile(File dir, String fileName) {
    8. if (dir == null || !dir.exists() || dir.isFile()) {
    9. return;
    10. }
    11. File[] files = dir.listFiles();
    12. if (files != null && files.length > 0) {
    13. for (File f : files) {
    14. if (f.isFile()) {
    15. if (f.getName().contains(fileName)) {
    16. System.out.println("找到了" + f.getAbsolutePath());
    17. }
    18. } else {
    19. searchFile(f, fileName);
    20. }
    21. }
    22. }
    23. }
    24. }

    字符集

    ASCII

    首尾是0,1个字节存储一个字符,总共表示128个字符

    GBK

    一个中文字符编码成两个字节的形式存储

    GBK兼容了ASCII字符集

    Unicode字符集

    UTF-8

    英文字符、数字等只占1个字节,汉字字符占用3个字节

    IO流

    I是指input,称为输入流,负责把数据读到内存中

    O是指output,称为输出流,负责写数据出去

    IO流体系

    字节流

    字节输入流:InputStream FileInputStream

    字节输出流:OutputStream FileOutputStream

    字符流

    字符输入流:Reader FileReader

    字符输出流:Writer FileWriter

    字节流

    FileInputStream(文件字节输入流)

    每次读取一个字节
    1. package learn11;
    2. import java.io.FileInputStream;
    3. public class FileInputStreamMrjj {
    4. public static void main(String[] args) throws Exception {
    5. FileInputStream is = new FileInputStream("src\\test");
    6. int b1 = is.read();
    7. System.out.println((char) b1);
    8. int b2 = is.read();
    9. System.out.println((char) b2);
    10. int b3 = is.read();
    11. System.out.println(b3);
    12. int b;
    13. while ((b = is.read()) != -1) {
    14. System.out.println((char) b);
    15. }
    16. is.close();
    17. }
    18. }
    每次读取多个字节 
    1. package learn11;
    2. import java.io.FileInputStream;
    3. import java.io.InputStream;
    4. public class FileInputStreamTest {
    5. public static void main(String[] args) throws Exception {
    6. InputStream is = new FileInputStream("src\\test");
    7. byte[] buffer = new byte[3];
    8. int len;
    9. while ((len = is.read(buffer)) != -1) {
    10. String rs = new String(buffer, 0, len);
    11. System.out.println(rs);
    12. }
    13. is.close();
    14. }
    15. }

    上面读取方法会有中文乱码的问题,用一次性全部读取完字节,可以解决中文乱码的问题

    一次性全都读完全部字节
    1. package learn11;
    2. import java.io.File;
    3. import java.io.FileInputStream;
    4. import java.io.InputStream;
    5. public class FileInputStreamAll {
    6. public static void main(String[] args) throws Exception {
    7. InputStream is = new FileInputStream("src\\test");
    8. File f = new File("src\\test");
    9. long size = f.length();
    10. byte[] buffer = new byte[(int) size];
    11. int len = is.read(buffer);
    12. System.out.println(new String(buffer));
    13. System.out.println(size);
    14. System.out.println(len);
    15. }
    16. }

    OutputStream FileOutputStream(文件字节输出流)

    1. package learn11;
    2. import java.io.FileNotFoundException;
    3. import java.io.FileOutputStream;
    4. import java.io.OutputStream;
    5. import java.nio.charset.StandardCharsets;
    6. public class FileOutputStreamTest1 {
    7. public static void main(String[] args) throws Exception {
    8. OutputStream os = new FileOutputStream("src\\test", true);
    9. os.write(97);
    10. os.write('b');
    11. // os.write('泰');
    12. byte[] bytes = "中国,加油".getBytes();
    13. os.write(bytes, 0, 9);
    14. os.write("\r\n".getBytes());
    15. os.close();
    16. }
    17. }

    拷贝文件

    1. package learn11;
    2. import java.io.FileInputStream;
    3. import java.io.FileOutputStream;
    4. import java.io.InputStream;
    5. import java.io.OutputStream;
    6. public class CopyPicture {
    7. public static void main(String[] args) throws Exception {
    8. InputStream is = new FileInputStream("C:/Users/HP/Desktop/1.jpg");
    9. OutputStream os = new FileOutputStream("D:/1.jpg");
    10. byte[] buffer = new byte[1024];
    11. int len;
    12. while ((len = is.read(buffer)) != -1){
    13. os.write(buffer,0,len);
    14. }
    15. os.close();
    16. is.close();
    17. }
    18. }

    释放资源

    try-catch-finally

    无论程序是正常执行还是出现异常了,最后一定会执行finally

    1. package learn11;
    2. public class test1 {
    3. public static void main(String[] args) {
    4. try {
    5. System.out.println(10 / 0);
    6. } catch (Exception e) {
    7. e.printStackTrace();
    8. } finally {
    9. System.out.println("finally执行了一次");
    10. }
    11. }
    12. }

    复制文件时应用try-catch-finally

    1. package learn11;
    2. import java.io.*;
    3. public class CopyPicture {
    4. public static void main(String[] args) throws Exception {
    5. InputStream is = null;
    6. OutputStream os = null;
    7. try {
    8. is = new FileInputStream("src\\test");
    9. os = new FileOutputStream("src\\test1");
    10. byte[] buffer = new byte[1024];
    11. int len;
    12. while ((len = is.read(buffer)) != -1) {
    13. os.write(buffer, 0, len);
    14. }
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. } finally {
    18. try {
    19. if(os != null) is.close();
    20. } catch (IOException e) {
    21. e.printStackTrace();
    22. }
    23. try {
    24. if(os != null) os.close();
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. }
    28. }
    29. }
    30. }
    try-with-resource

    释放资源,自动调用AutoCloseable接口

    1. package learn11;
    2. import java.io.*;
    3. public class CopyPicture {
    4. public static void main(String[] args) throws Exception {
    5. try (
    6. InputStream is = new FileInputStream("src\\test");
    7. OutputStream os = new FileOutputStream("src\\test1");
    8. ) {
    9. byte[] buffer = new byte[1024];
    10. int len;
    11. while ((len = is.read(buffer)) != -1) {
    12. os.write(buffer, 0, len);
    13. }
    14. } catch (IOException e) {
    15. e.printStackTrace();
    16. }
    17. }
    18. }
    实用场景

    字节流适合做一切文件数据的拷贝(音视频、文本);字节流不适合读取中文内容输出(有乱码)

    字符流

    每次读取一个字符

    1. package learn11;
    2. import java.io.FileReader;
    3. import java.io.Reader;
    4. public class FileReaderTest1 {
    5. public static void main(String[] args) {
    6. try (Reader fr = new FileReader("src\\test");) {
    7. int c;
    8. while ((c = fr.read()) != -1) {
    9. System.out.print((char) c);
    10. }
    11. } catch (Exception e) {
    12. e.printStackTrace();
    13. }
    14. }
    15. }

    每次读取多个字符

    1. package learn11;
    2. import java.io.FileReader;
    3. import java.io.Reader;
    4. public class FileReaderTest1 {
    5. public static void main(String[] args) {
    6. try (Reader fr = new FileReader("src\\test");) {
    7. char[] buffer = new char[3];
    8. int len;
    9. while ((len = fr.read(buffer)) != -1) {
    10. System.out.println(new String(buffer, 0, len));
    11. }
    12. } catch (Exception e) {
    13. e.printStackTrace();
    14. }
    15. }
    16. }

    FileWriter(文件字符输出流)

    需要注意:关闭流包含了刷新流

    字符输出数据后,必须刷新流,或者关闭流。

    1. package learn11;
    2. import java.io.FileWriter;
    3. import java.io.Writer;
    4. public class FileWriterTest1 {
    5. public static void main(String[] args) {
    6. try (Writer fw = new FileWriter("src\\test",true);) {
    7. fw.write('a');
    8. fw.write(99);
    9. fw.write('测');
    10. fw.write("中国,加油!", 0, 3);
    11. fw.write("\r\n");
    12. char[] buffer = {'测', '试', 'a', 'b', 'c'};
    13. fw.write(buffer);
    14. fw.write(buffer, 0, 2);
    15. } catch (Exception e) {
    16. e.printStackTrace();
    17. }
    18. }
    19. }

    适用场景

    适合做文本文件的读写操作

  • 相关阅读:
    C++ if 语句
    甘露糖-顺铂mannose-cisplatin|甘露糖-聚乙二醇-顺铂cisplatin-PEG-mannose
    教育课堂小程序,三分钟打造专属小程序 带完整搭建教程
    thread_local 线程变量存储.tbss段或.tdata段
    【游戏建模全流程】使用ZBrush制作龙模型
    接口自动化测试难点:数据库验证解决方案
    VScode开发STM32/GD32单片机-环境搭建
    vue3 搭配ElementPlus做基础表单校验 自定义表单校验
    应用引导页配置相关 - iOS
    Vue的生命周期
  • 原文地址:https://blog.csdn.net/MRJJ_9/article/details/132052637