栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA之IO

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA之IO

创建一个文件对象

使用绝对路径或者相对路径创建File对象

File(String pathname)
File(File parent, String child)
File(String parent, String child)
File(URI uri)
package com.myio;
import java.io.File;
public class myio {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
//		绝对路径
File myfile=new File("C:/Folder");
System.out.println(myfile.getAbsolutePath());
File myfile2=new File("Folder.exe");
System.out.println(myfile2.getAbsolutePath());
File myfile3=new File(myfile,"Folder.txt");
	}
}

文件常用方法1
package file;
import java.io.File;
import java.util.Date;
public class TestFile {
    public static void main(String[] args) {
        File f = new File("d:/LOLFolder/LOL.exe");
        System.out.println("当前文件是:" +f);
        //文件是否存在
        System.out.println("判断是否存在:"+f.exists());
        //是否是文件夹
        System.out.println("判断是否是文件夹:"+f.isDirectory());
        //是否是文件(非文件夹)
        System.out.println("判断是否是文件:"+f.isFile());
        //文件长度
        System.out.println("获取文件的长度:"+f.length());
        //文件最后修改时间
        long time = f.lastModified();
        Date d = new Date(time);
        System.out.println("获取文件的最后修改时间:"+d);
        //设置文件修改时间为1970.1.1 08:00:00
        f.setLastModified(0);
        //文件重命名
        File f2 =new File("d:/LOLFolder/DOTA.exe");
        f.renameTo(f2);
        System.out.println("把LOL.exe改名成了DOTA.exe");
        System.out.println("注意: 需要在D:\LOLFolder确实存在一个LOL.exe,rn才可以看到对应的文件长度、修改时间等信息");
    }
}

package file;
import java.io.File;
import java.io.IOException;
public class TestFile {
    public static void main(String[] args) throws IOException {
        File f = new File("d:/LOLFolder/skin/garen.ski");
        // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        f.list();
        // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        File[]fs= f.listFiles();
        // 以字符串形式返回获取所在文件夹
        f.getParent();
        // 以文件形式返回获取所在文件夹
        f.getParentFile();
        // 创建文件夹,如果父文件夹skin不存在,创建就无效
        f.mkdir();
        // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹
        f.mkdirs();
        // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
        f.createNewFile();
        // 所以创建一个空文件之前,通常都会创建父目录
        f.getParentFile().mkdirs();
        // 列出所有的盘符c: d: e: 等等
        f.listRoots();
        // 刪除文件
        f.delete();
        // JVM结束的时候,刪除文件,常用于临时文件的删除
        f.deleteOnExit();
    }
}

示例:遍历文件夹,返回最大和最小文件

package com.myio;
import java.io.File;
import java.util.Date;
public class myio {
    public static void main(String[] args) {
//    	设置File对象
        File file = new File("C:\WINDOWS");
//        列出File对象目录下的所有文件
        File[] fs = file.listFiles();
//        设置File类的最大文件引用和最小文件引用
        File max_file = null;
        File min_file = null;
//        设置最大值与最小值
        long max = 0;
        long min = Long.MAX_VALUE;
        assert fs != null;
//        依次遍历File类型的文件数组
        for (File e:fs){
//        	最小值大于某个文件,并且该文件大小不为0
            if(e.length()max){
                max_file = e;//将最大文件引用指向该文件
                max = e.length();//并将该文件的大小赋值给最大值
            }

        }
        assert max_file != null;
        System.out.println("容量最大的文件名称:"+max_file.getName()+" 容量大小:"+max_file.length()+"B");
        assert min_file != null;
        System.out.println("容量最大的文件名称 "+min_file.getName()+" 容量大小:"+min_file.length()+"B");
    }
}

读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream
输出流:OutputStream

文件输入流

建立了一个文件输入流,这个流可以用来把数据从硬盘的文件,读取到JVM(内存)。目前代码只是建立了流,还没有开始读取。

package com.myio;
import java.io.File;
import java.io.FileInputStream;
public class myFileInput {
    public static void main(String[] args) throws Exception {
    	File f=new File("d:/lol.txt");//创建File类型对象,创建文件
    	FileInputStream fin=new FileInputStream(f);//创建文件输入流,将其读入到JVM内存中
    }
}

所有的数据存放在计算机中都是以数字的形式存放的。 所以字母就需要转换为数字才能够存放。
比如A就对应的数字65,a对应的数字97. 不同的字母和符号对应不同的数字,就是一张码表。
ASCII是这样的一种码表。 只包含简单的英文字母,符号,数字等等。 不包含中文,德文,俄语等复杂的。

ASCII码

a 97、A 65、0 48

以字节流的形式读取文件内容

InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileInputStream 是InputStream子类,以FileInputStream 为例进行文件读取。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
  
public class TestStream {
  
    public static void main(String[] args) {
        try {
            //准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
            File f =new File("d:/lol.txt");
            //创建基于文件的输入流
            FileInputStream fis =new FileInputStream(f);//创建文件输入流,将其读入到JVM内存中
            //创建字节数组,其长度就是文件的长度
            byte[] all =new byte[(int) f.length()];//准备一个字节数组容器
            //以字节流的形式读取文件所有内容
            fis.read(all);
            for (byte b : all) {
                //打印出来是65 66
                System.out.println(b);
            }     
            //每次使用完流,都应该进行关闭
            fis.close();   
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          
    }
}
以字节流的形式向文件写入数据

OutputStream是字节输出流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。
FileOutputStream 是OutputStream子类,以FileOutputStream 为例向文件写出数据

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestStream {
    public static void main(String[] args) {
        try {
            // 准备文件lol2.txt其中的内容是空的
            File f = new File("d:/lol2.txt");
            // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
            byte data[] = { 88, 89 };
            // 创建基于文件的输出流
            FileOutputStream fos = new FileOutputStream(f);
            // 把数据写入到输出流
            fos.write(data);
            // 关闭输出流
            fos.close(); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
讲解

文件输入流:
文件输出流:

关闭流的方式

所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。

如果文件不存在,或者读取的时候出现问题而抛出异常,那么就不会执行这一行关闭流的代码,存在巨大的资源占用隐患。
不推荐使用在try的作用域里关闭文件输入流

标准的finally关闭流

  1. 首先把流的引用声明在try的外面,如果声明在try里面,其作用域无法抵达finally.
  2. 在finally关闭之前,要先判断该引用是否为空
  3. 关闭的时候,需要再一次进行try catch处理
package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
	public static void main(String[] args) {
		File f = new File("d:/lol.txt");
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(f);
			byte[] all = new byte[(int) f.length()];
			fis.read(all);
			for (byte b : all) {
				System.out.println(b);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 在finally 里关闭流
			if (null != fis)//先判断流是否为null,不为空时才关闭流
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}
}

**技巧:**所有的流,都实现了一个接口叫做 AutoCloseable,任何类实现了这个接口,都可以在try()中进行实例化。 并且在try, catch, finally结束的时候自动关闭,回收相关资源

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
    public static void main(String[] args) {
        File f = new File("d:/lol.txt");
        //把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
        try (FileInputStream fis = new FileInputStream(f)) {
            byte[] all = new byte[(int) f.length()];
            fis.read(all);
            for (byte b : all) {
                System.out.println(b);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

try (FileInputStream fis = new FileInputStream(f))
想要自动关闭的流在try()中定义出来,然后不用显示写出close,在catch或者finally结束时自动关闭。

JAVA的字符流 READER WRITER 使用字符流读取文件

FileReader 是Reader子类,以FileReader 为例进行文件读取

package stream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TestStream {
	public static void main(String[] args) {
		// 准备文件lol.txt其中的内容是AB
		File f = new File("d:/lol.txt");
		// 创建基于文件的Reader
		try (FileReader fr = new FileReader(f)) {
			// 创建字符数组,其长度就是文件的长度
			char[] all = new char[(int) f.length()];
			// 以字符流的形式读取文件所有内容
			fr.read(all);
			for (char b : all) {
				// 打印出来是A B
				System.out.println(b);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
使用字符流把字符串写入到文件

FileWriter 是Writer的子类,以FileWriter 为例把字符串写入到文件

package stream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class TestStream {
    public static void main(String[] args) {
        // 准备文件lol2.txt
        File f = new File("d:/lol2.txt");
        // 创建基于文件的Writer
        try (FileWriter fr = new FileWriter(f)) {
            // 以字符流的形式把数据写入到文件中
        	String data="abcdefg1234567890";
        	char[] cs = data.toCharArray();
            fr.write(cs);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

JAVA 编码中文问题系统透彻讲解 UNICODE GBK UTF-8 ISO-8859-1 之间的区别 Java采用的是Unicode

写在.java源代码中的汉字,在执行之后,都会变成JVM中的字符。
而这些中文字符采用的编码方式,都是使用UNICODE. "中"字对应的UNICODE是4E2D,所以在内存中,实际保存的数据就是十六进制的0x4E2D, 也就是十进制的20013。

System.out.printf("字符: "%s" 的在编码方式%s下的十六进制值是%n", str, encode);//可以在参数中加入逗号,表示格式化模板
 System.out.println();//参数中不能加逗号
package stream;
import java.io.UnsupportedEncodingException;
public class TestStream {
public static void main(String[] args) {
		String str = "中";
		showCode(str);
	}
	private static void showCode(String str) {
		String[] encodes = { "BIG5", "GBK", "GB2312", "UTF-8", "UTF-16", "UTF-32" };
		for (String encode : encodes) {
			showCode(str, encode);
		}
	}
	private static void showCode(String str, String encode) {
		try {
			System.out.printf("字符: "%s" 的在编码方式%s下的十六进制值是%n", str, encode);
			byte[] bs = str.getBytes(encode);

			for (byte b : bs) {
				int i = b&0xff;				System.out.print(Integer.toHexString(i) + "t");
			}
			System.out.println();
			System.out.println();
		} catch (UnsupportedEncodingException e) {		System.out.printf("UnsupportedEncodingException: %s编码方式无法解析字符%sn", encode, str);
		}
	}
}
用FileInputStream 字节流正确读取中文

为了能够正确的读取中文内容

  1. 必须了解文本是以哪种编码方式保存字符的
  2. 使用字节流读取了文本后,再使用对应的编码方式去识别这些数字,得到正确的字符
    如本例,一个文件中的内容是字符中,编码方式是GBK,那么读出来的数据一定是D6D0。
    再使用GBK编码方式识别D6D0,就能正确的得到字符中
package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
    public static void main(String[] args) {
        File f = new File("E:\project\j2se\src\test.txt");
        try (FileInputStream fis = new FileInputStream(f);) {
            byte[] all = new byte[(int) f.length()];
            fis.read(all);
  
            //文件中读出来的数据是
            System.out.println("文件中读出来的数据是:");
            for (byte b : all) 
            {
                int i = b&0x000000ff;  //只取16进制的后两位             System.out.println(Integer.toHexString(i));
            }
            System.out.println("把这个数字,放在GBK的棋盘上去:");
            String str = new String(all,"GBK");
            System.out.println(str);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  
    }
}
用FileReader 字符流正确读取中文

FileReader得到的是字符,所以一定是已经把字节根据某种编码识别成了字符了
而FileReader使用的编码方式是Charset.defaultCharset()的返回值,如果是中文的操作系统,就是GBK
FileReader是不能手动设置编码方式的,为了使用其他的编码方式,只能使用InputStreamReader来代替,像这样:

new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8")); 

用记事本另存为UTF-8格式,然后用UTF-8就能识别对应的中文了。
解释: 为什么中字前面有一个?
如果是使用记事本另存为UTF-8的格式,那么在第一个字节有一个标示符,叫做BOM用来标志这个文件是用UTF-8来编码的

package stream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class TestStream {

	public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {
		File f = new File("E:\project\j2se\src\test.txt");
		System.out.println("默认编码方式:"+Charset.defaultCharset());
		//FileReader得到的是字符,所以一定是已经把字节根据某种编码识别成了字符了
		//而FileReader使用的编码方式是Charset.defaultCharset()的返回值,如果是中文的操作系统,就是GBK
		try (FileReader fr = new FileReader(f)) {
			char[] cs = new char[(int) f.length()];
			fr.read(cs);
			System.out.printf("FileReader会使用默认的编码方式%s,识别出来的字符是:%n",Charset.defaultCharset());
			System.out.println(new String(cs));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//FileReader是不能手动设置编码方式的,为了使用其他的编码方式,只能使用InputStreamReader来代替
		//并且使用new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8")); 这样的形式
		try (InputStreamReader isr = new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8"))) {
			char[] cs = new char[(int) f.length()];
			isr.read(cs);
			System.out.printf("InputStreamReader 指定编码方式UTF-8,识别出来的字符是:%n");
			System.out.println(new String(cs));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}
缓存流

字节流和字符流的弊端:
在每一次读写的时候,都会访问硬盘。 如果读写的频率比较高的时候,其性能表现不佳。
为了解决以上弊端,采用缓存流。
缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数据读取完毕,再到硬盘中读取。
缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区达到一定的量,才把这些数据,一起写入到硬盘中去。按照这种操作模式,就不会像字节流,字符流那样每写一个字节都访问硬盘,从而减少了IO操作

package stream;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
public class TestStream {
 
    public static void main(String[] args) {
        // 准备文件lol.txt其中的内容是
        // garen kill teemo
        // teemo revive after 1 minutes
        // teemo try to garen, but killed again
        File f = new File("d:/lol.txt");
        // 创建文件字符流
        // 缓存流必须建立在一个存在的流的基础上
        try (
        		FileReader fr = new FileReader(f); 
        		BufferedReader br = new BufferedReader(fr);
        	) 
        {
            while (true) {
                // 一次读一行
                String line = br.readLine();
                if (null == line)
                    break;
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
}

PrintWriter 缓存字符输出流, 可以一次写出一行数据

package stream;  
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter; 
public class TestStream {  
    public static void main(String[] args) {
        // 向文件lol2.txt中写入三行语句
        File f = new File("d:/lol2.txt");     
        try (
                // 创建文件字符流
                FileWriter fw = new FileWriter(f);
                // 缓存流必须建立在一个存在的流的基础上               
                PrintWriter pw = new PrintWriter(fw);               
        ) {
            pw.println("garen kill teemo");
            pw.println("teemo revive after 1 minutes");
            pw.println("teemo try to garen, but killed again");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

需要立即把数据写入到硬盘,而不是等缓存满了才写出去。 这时候就需要用到flush

package stream;
   
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestStream {
    public static void main(String[] args) {
        //向文件lol2.txt中写入三行语句
        File f =new File("d:/lol2.txt");
        //创建文件字符流
        //缓存流必须建立在一个存在的流的基础上
        try(FileWriter fr = new FileWriter(f);PrintWriter pw = new PrintWriter(fr);) {
            pw.println("garen kill teemo");
            //强制把缓存中的数据写入硬盘,无论缓存是否已满
                pw.flush();            
            pw.println("teemo revive after 1 minutes");
                pw.flush();
            pw.println("teemo try to garen, but killed again");
                pw.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
数据流

DataInputStream 数据输入流
DataOutputStream 数据输出流

package stream;
     
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
     
public class TestStream {
     
    public static void main(String[] args) {
    	write();
    	read();
    }

	private static void read() {
        File f =new File("d:/lol.txt");
		try (
                FileInputStream fis  = new FileInputStream(f);
                DataInputStream dis =new DataInputStream(fis);
        ){
            boolean b= dis.readBoolean();
            int i = dis.readInt();
            String str = dis.readUTF();
            
            System.out.println("读取到布尔值:"+b);
            System.out.println("读取到整数:"+i);
            System.out.println("读取到字符串:"+str);

        } catch (IOException e) {
            e.printStackTrace();
        }
		
	}

	private static void write() {
        File f =new File("d:/lol.txt");
		try (
                FileOutputStream fos  = new FileOutputStream(f);
                DataOutputStream dos =new DataOutputStream(fos);
        ){
            dos.writeBoolean(true);
            dos.writeInt(300);
            dos.writeUTF("123 this is gareen");
        } catch (IOException e) {
            e.printStackTrace();
        }
		
	}
}
对象流

对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘
一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口

package charactor;
import java.io.Serializable;
public class Hero implements Serializable {
	//表示这个类当前的版本,如果有了变化,比如新设计了属性,就应该修改这个版本号
	private static final long serialVersionUID = 1L; 
	public String name;
	public float hp;
}
package stream;   
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; 
import charactor.Hero;   
public class TestStream {
   
    public static void main(String[] args) {
        //创建一个Hero garen
        //要把Hero对象直接保存在文件上,务必让Hero类实现Serializable接口
        Hero h = new Hero();
        h.name = "garen";
        h.hp = 616;         
        //准备一个文件用于保存该对象
        File f =new File("d:/garen.lol");
        try(
	        //创建对象输出流
	        FileOutputStream fos = new FileOutputStream(f);
	        ObjectOutputStream oos =new ObjectOutputStream(fos);
        	//创建对象输入流        		
            FileInputStream fis = new FileInputStream(f);
            ObjectInputStream ois =new ObjectInputStream(fis);
        ) {
            oos.writeObject(h);
            Hero h2 = (Hero) ois.readObject();
            System.out.println(h2.name);
            System.out.println(h2.hp);
              
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }         
    }
}

对象序列化与反序列化
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
public class TestObjectStream {
 
    public static void main(String[] args) {
 
        // 创建一个 Hero garen
        // 将Hero对象保存到文件中,需要Hero实现Serializable接口
        File f = new File("/home/dong/idea/garen.txt");
        
        Hero[] heroes = new Hero[10];
 
        for (int i = 0; i < heroes.length; i++) {
            heroes[i] = new Hero();
            heroes[i].name = "garen" + i;
            heroes[i].hp = 300 + i;
        }
 
        try (FileOutputStream fos = new FileOutputStream(f);
             ObjectOutputStream oos = new ObjectOutputStream(fos);
 
             // 创建对象输入流
             FileInputStream fis = new FileInputStream(f);
             ObjectInputStream ois = new ObjectInputStream(fis);
        ) {
 
            oos.writeObject(heroes);
 
            Hero[] heroes2 = (Hero[]) ois.readObject();
 
            for (Hero h : heroes)
                System.out.println(h.name);
 
            for (Hero h : heroes2)
                System.out.println(h.name);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
控制台输入输出流

System.out 是常用的在控制台输出数据的
System.in 可以从控制台输入数据

System.in
package stream;

import java.io.IOException;
import java.io.InputStream;

public class TestStream {

	public static void main(String[] args) {
		// 控制台输入
		try (InputStream is = System.in;) {
			while (true) {
				// 敲入a,然后敲回车可以看到
				// 97 13 10
				// 97是a的ASCII码
				// 13 10分别对应回车换行
				int i = is.read();
				System.out.println(i);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Scanner读取字符串

使用System.in.read虽然可以读取数据,但是很不方便
使用Scanner就可以逐行读取了

package stream;
   
import java.util.Scanner;
   
public class TestStream {
   
    public static void main(String[] args) {
        
        	Scanner s = new Scanner(System.in);
        	
        	while(true){
        	 int a = s.nextInt();
        System.out.println("第一个整数:"+a);
	        	String line = s.nextLine();
	        	System.out.println(line);
        	}
        
    }
}

注意一下next();与nextline();的不同之处:

next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;遇到空格等就结束
nextLine()吸取字符前后的空格/Tab键,回车键截止。next’line()吸取Scanner类中的字符之后,该字符就不存在在Scanner对象之中了

总结
  1. 流分为字节流和字符流
  2. 字节流下面常用的又有数据流和对象流
  3. 字符流下面常用的又有缓存流
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号