image.png
    image.png
    image.png

    • RandomAccessFile 的使用
      1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput 和 DataOutput接口

      2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流

      3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建
      如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)

      4.可以通过相关操作,实现RandomAccessFile“插入”数据的效果
      *
    1. package com.atguigu;
    2. import com.sun.org.apache.xpath.internal.operations.String;
    3. import org.junit.Test;
    4. import java.io.File;
    5. import java.io.IOException;
    6. import java.io.RandomAccessFile;
    7. /**
    8. * RandomAccessFile 的使用
    9. * 1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput 和 DataOutput接口
    10. *
    11. * 2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
    12. *
    13. * 3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建
    14. * 如果写出到的文件存在,则会对原有文件内容进行覆盖。(默认情况下,从头覆盖)
    15. *
    16. * 4.可以通过相关操作,实现RandomAccessFile“插入”数据的效果
    17. *
    18. *
    19. * @author Dxkstart
    20. * @create 2021-06-03 16:16
    21. */
    22. public class RandomAccessFile_Test {
    23. @Test
    24. public void test1() {
    25. RandomAccessFile raf1 = null;
    26. RandomAccessFile raf2 = null;
    27. try {
    28. //1.
    29. raf1 = new RandomAccessFile(new File("爱丽丝1.jpg"), "r");
    30. raf2 = new RandomAccessFile(new File("爱丽丝2.jpg"), "rw");
    31. //2.
    32. byte[] buffer = new byte[1024];
    33. int len;
    34. while ((len = raf1.read(buffer)) != -1) {
    35. raf2.write(buffer, 0, len);
    36. }
    37. } catch (IOException e) {
    38. e.printStackTrace();
    39. } finally {
    40. //3.
    41. try {
    42. if(raf1 != null) {
    43. raf1.close();
    44. }
    45. } catch (IOException e) {
    46. e.printStackTrace();
    47. }
    48. try {
    49. if(raf2 != null) {
    50. raf2.close();
    51. }
    52. } catch (IOException e) {
    53. e.printStackTrace();
    54. }
    55. }
    56. }
    57. @Test
    58. public void test2() throws IOException {
    59. RandomAccessFile raf1 = new RandomAccessFile(new File("hello.txt"),"rw");
    60. raf1.seek(3);//将指针调到角标为3的位置
    61. raf1.write("ppp".getBytes());
    62. raf1.close();
    63. }
    64. /*
    65. 使用RandomAccessFile实现插入数据的效果
    66. */
    67. @Test
    68. public void test3() throws IOException {
    69. RandomAccessFile raf1 = new RandomAccessFile(new File("hello.txt"),"rw");
    70. raf1.seek(3);//将指针调到角标为3的位置
    71. //保存指针3后面的所有数据到StringBuilder中
    72. StringBuilder builder = new StringBuilder((int) new File("hello.txt").length());
    73. byte[] buffer = new byte[20];
    74. int len;
    75. while((len = raf1.read(buffer)) != -1 ){
    76. builder.append(new String());//????? new String(buffer,0,len)
    77. }
    78. //调回指针,写入“ppp”
    79. raf1.seek(3);
    80. raf1.write("ppp".getBytes());
    81. //将StringBuilder中的数据写入到文件中
    82. raf1.write(builder.toString().getBytes());
    83. raf1.close();
    84. }
    85. }