javaIO流学习

x33g5p2x  于2021-11-25 转载在 Java  
字(6.3k)|赞(0)|评价(0)|浏览(463)

先从之前用到过的控制台输入流读取开始讲解:

1:BufferedReader:创建

  1. BufferedReader br = new BufferedReader(new
  2. InputStreamReader(System.in));

读取输入的多个字符直到按下q退出:

  1. package 任务11IO流;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. /** * @author ${范涛之} * @Description * @create 2021-11-25 1:16 */
  7. public class Test1 {
  8. public static void main(String[] args) throws IOException {
  9. char c;
  10. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  11. System.out.println("输入字符,按下q退出程序");
  12. do {
  13. c = (char)bufferedReader.read();
  14. System.out.println(c);
  15. }while (c!='q');
  16. }
  17. }

读取输入的字符串:

  1. package 任务11IO流;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. /** * @author ${范涛之} * @Description * @create 2021-11-25 1:16 */
  7. public class Test1 {
  8. public static void main(String[] args) throws IOException {
  9. /** * 读取字符 */
  10. // char c;
  11. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  12. // System.out.println("输入字符,按下q退出程序");
  13. // do {
  14. // c = (char)bufferedReader.read();
  15. // System.out.println(c);
  16. // }while (c!='q');
  17. /** * 读取字符串 */
  18. String str;
  19. System.out.println("请输入字符串");
  20. do {
  21. str = bufferedReader.readLine();
  22. System.out.println(str);
  23. }while (!str.equals("end"));
  24. }
  25. }

读取文件:

两个重要的流是 FileInputStream 和 FileOutputStream:

1:FileInputStream:

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

  1. InputStream f = new FileInputStream("C:/java/hello");

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

  1. File f = new File("C:/java/hello");
  2. InputStream in = new FileInputStream(f);
  1. package 任务11IO流;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.InputStream;
  6. /** * @author ${范涛之} * @Description * @create 2021-11-25 1:54 */
  7. public class Test2 {
  8. public static void main(String[] args) throws FileNotFoundException {
  9. File f = new File("F:/my.txt");
  10. InputStream in = new FileInputStream(f);
  11. System.out.println(in);
  12. }
  13. }
  14. // 第二种方法:
  15. package 任务11IO流;
  16. import java.io.File;
  17. import java.io.FileInputStream;
  18. import java.io.FileNotFoundException;
  19. import java.io.InputStream;
  20. /** * @author ${范涛之} * @Description * @create 2021-11-25 1:54 */
  21. public class Test2 {
  22. public static void main(String[] args) throws FileNotFoundException {
  23. // File f = new File("F:/my.txt");
  24. // InputStream in = new FileInputStream(f);
  25. // System.out.println(in);
  26. InputStream f = new FileInputStream("F:/my.txt");
  27. System.out.println(f);
  28. }
  29. }

截图:

FileOutputStream:

  • 该类用来创建一个文件并向文件中写数据。
  • 如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
  • 有两个构造方法可以用来创建 FileOutputStream 对象。
  • 使用字符串类型的文件名来创建一个输出流对象:
  1. OutputStream f = new FileOutputStream("C:/java/hello")
  • 也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
  1. File f = new File("C:/java/hello");
  2. OutputStream fOut = new FileOutputStream(f);
  1. package 任务11IO流;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.OutputStream;
  5. /** * @author ${范涛之} * @Description * @create 2021-11-25 2:02 */
  6. public class Test3 {
  7. public static void main(String[] args) throws FileNotFoundException {
  8. OutputStream f = new FileOutputStream("F:/hello");
  9. System.out.println(f);
  10. }
  11. }

运行截图:

实例

下面是一个演示 InputStream 和 OutputStream 用法的例子:fileStreamTest.java 文件代码:

  1. import java.io.*;
  2. public class fileStreamTest {
  3. public static void main(String[] args) {
  4. try {
  5. byte bWrite[] = { 11, 21, 3, 40, 5 };
  6. OutputStream os = new FileOutputStream("test.txt");
  7. for (int x = 0; x < bWrite.length; x++) {
  8. os.write(bWrite[x]); // writes the bytes
  9. }
  10. os.close();
  11. InputStream is = new FileInputStream("test.txt");
  12. int size = is.available();
  13. for (int i = 0; i < size; i++) {
  14. System.out.print((char) is.read() + " ");
  15. }
  16. is.close();
  17. } catch (IOException e) {
  18. System.out.print("Exception");
  19. }
  20. }
  21. }
  • 上面的程序首先创建文件test.txt,并把给定的数字以二进制形式写进该文件,同时输出到控制台上。
  • 以上代码由于是二进制写入,可能存在乱码,你可以使用以下代码实例来解决乱码问题:

fileStreamTest2.java 文件代码::

  1. //文件名 :fileStreamTest2.java
  2. import java.io.*;
  3. public class fileStreamTest2 {
  4. public static void main(String[] args) throws IOException {
  5. File f = new File("a.txt");
  6. FileOutputStream fop = new FileOutputStream(f);
  7. // 构建FileOutputStream对象,文件不存在会自动新建
  8. OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
  9. // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
  10. writer.append("中文输入");
  11. // 写入到缓冲区
  12. writer.append("\r\n");
  13. // 换行
  14. writer.append("English");
  15. // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
  16. writer.close();
  17. // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
  18. fop.close();
  19. // 关闭输出流,释放系统资源
  20. FileInputStream fip = new FileInputStream(f);
  21. // 构建FileInputStream对象
  22. InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
  23. // 构建InputStreamReader对象,编码与写入相同
  24. StringBuffer sb = new StringBuffer();
  25. while (reader.ready()) {
  26. sb.append((char) reader.read());
  27. // 转成char加到StringBuffer对象中
  28. }
  29. System.out.println(sb.toString());
  30. reader.close();
  31. // 关闭读取流
  32. fip.close();
  33. // 关闭输入流,释放系统资源
  34. }
  35. }

Java中的目录:

创建目录:

File类中有两个方法可以用来创建文件夹:

mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。

mkdirs()方法创建一个文件夹和它的所有父文件夹。

下面的例子创建 "/tmp/user/java/bin"文件夹:

  1. import java.io.File;
  2. public class CreateDir {
  3. public static void main(String[] args) {
  4. String dirname = "/tmp/user/java/bin";
  5. File d = new File(dirname);
  6. // 现在创建目录
  7. d.mkdirs();
  8. }
  9. }

注意: Java 在 UNIX 和 Windows 自动按约定分辨文件路径分隔符。如果你在 Windows 版本的 Java 中使用分隔符 (/) ,路径依然能够被正确解析。

读取目录:

  • 一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

  • 如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。

  • 可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。

  • 下面展示的例子说明如何使用 list() 方法来检查一个文件夹中包含的内容:

DirList.java 文件代码:

  1. import java.io.File;
  2. public class DirList {
  3. public static void main(String args[]) {
  4. String dirname = "/tmp";
  5. File f1 = new File(dirname);
  6. if (f1.isDirectory()) {
  7. System.out.println("目录 " + dirname);
  8. String s[] = f1.list();
  9. for (int i = 0; i < s.length; i++) {
  10. File f = new File(dirname + "/" + s[i]);
  11. if (f.isDirectory()) {
  12. System.out.println(s[i] + " 是一个目录");
  13. } else {
  14. System.out.println(s[i] + " 是一个文件");
  15. }
  16. }
  17. } else {
  18. System.out.println(dirname + " 不是一个目录");
  19. }
  20. }
  21. }
  22. 目录 /tmp
  23. bin 是一个目录
  24. lib 是一个目录
  25. demo 是一个目录
  26. test.txt 是一个文件
  27. README 是一个文件
  28. index.html 是一个文件
  29. include 是一个目录

我这里尝试递归一下自己F盘:

  1. package 任务11IO流;
  2. import java.io.File;
  3. /** * @author ${范涛之} * @Description * @create 2021-11-25 2:13 */
  4. public class Test4 {
  5. public static void main(String[] args) {
  6. String dirname = "F:/";
  7. File f1 = new File(dirname);
  8. if (f1.isDirectory()){
  9. System.out.println("目录"+dirname);
  10. String[] s = f1.list();
  11. for (int i = 0; i <s.length; i++) {
  12. File f = new File(dirname+"/"+s[i]);
  13. if (f.isDirectory()) {
  14. System.out.println(s[i] + " 是一个目录");
  15. }else {
  16. System.out.println(s[i] + " 是一个文件");
  17. }
  18. }
  19. }else {
  20. System.out.println(dirname + " 不是一个目录");
  21. }
  22. }
  23. }

结果:

成功读出,暂时休息---------------------------------------------

相关文章

最新文章

更多

目录