Java的Stream流
yi、控制台输入输出流,
1、读取控制台输入
Java的控制台输入由System.in完成。为了获得一个绑定到控制台的字符流,可以把System.in包装在一个BufferedReader对象中来创建一个字符流,创建BufferedReader的语法如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader对象创建后,可以通过read()方法从字符流中读取一个字符;或者通过readLine()方法从字符流中读取一个字符串。
- package cuiyuee;
- import java.io.*;
- public class BRRead {
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- char c;
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- System.out.println("输入字符,按下q键退出。");
- do{
- c = (char)br.read();
- System.out.println(c);
- }while(c != 'q');
- }
- }
- package cuiyuee;
- import java.io.*;
- public class BRReadLine {
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String str ;
- System.out.println("请输入一个字符串,输入'End'自动退出:");
- do{
- str = br.readLine();
- System.out.println(str);
- }while(!str.equals("end"));
- }
- }
2、控制台输出
控制台的输出由print()和println()完成,这些方法都由类PrintStream定义,System.out是该类对象的一个引用。
PrintStrea继承了OutputStream类,也可以用write()方法进行向控制台的写操作。但常用print()和println()
- package cuiyuee;
- import java.io.*;
- public class writeDemo {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int b ;
- b = 'A';
- System.out.write(b);
- System.out.write('\n');
- }
- }
二、文件读写流,FileInputStream和FileOutputStream
1、FileInputStream,该流用于从文件读取数据,有多种方法可以用来创建对象。
1.1、可以用字符串类型的文件名来创建一个输入流对象来读取文件。
InputStream f = new FileInputStream("C:/java/hello");
1.2、也可以使用一个文件对象来创建一个输入流对象来读取文件,首先需要用File()方法创建一个文件对象
File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);
1.3、创建了InputStream对象就可以使用以下方法来读取流或者进行其他的流操作。
序号 | 方法 |
1 |
public void close() throws IOException() 关闭此文件输入流并释放与此流有关的所有系统资源。跑出IOException异常 |
2 | finalize(),清除与这个文件的连接,确保在不再引入文件输入流时调用期close方法。 |
3 | read(int r),从InputStream对象中读取指定字节的数据,返回为整数值。返回为下一字节数据。如果已经到结尾,则返回为-1. |
4 | read(byte[] r),从输入流读取r.length长度的字节,返回读取的字节数,如果是文件结尾则返回-1. |
5 | available(),返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
2、FileOutputStream,该类用来创建一个文件并向文件中写数据
2.1、如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
2.2、也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
- package cuiyuee;
- import java.io.*;
- public class FileStreamTest2 {
- public static void main(String[] args) throws IOException{
- // TODO Auto-generated method stub
- File f = new File("C:/java/hello.txt");
- FileOutputStream fop = new FileOutputStream(f);
- //构建FileOutputStream对象,文件不存在会自动新建
- OutputStreamWriter writer = new OutputStreamWriter(fop,"UTF-8");
- //构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows为gbk
- writer.append("中文输入");
- //写入到缓冲区
- writer.append("\r\n");
- //换行
- writer.append("English");
- //刷新缓存,写入到文件,如果下面已经没有写入内容了,直接close也可写入
- writer.close();
- //关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
- fop.close();
- //关闭输出流,释放系统资源
- FileInputStream fip = new FileInputStream(f);
- //构建FileInputStream对象
- InputStreamReader reader = new InputStreamReader(fip,"UTF-8");
- //构建InputStreamReader对象,编码与写入相同
- StringBuffer sb = new StringBuffer();
- while(reader.ready()){
- sb.append((char) reader.read());
- //转成char加到StringBuffer对象中
- }
- System.out.println(sb.toString());
- reader.close();
- //关闭读取流
- fip.close();
- //关闭输入流,释放系统资源
- }
- }
三、还有一些关于文件和IO的类
1、Java File类
Java文件类以抽象的方式代表文件名和目录路径名,该类主要用于文件和目录的创建,文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。
1.1、通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
File(File parent,String child);
1.2、通过将给定路径名字符串转换成抽象路径名来创建一个新File实例。
File(String pathname)
1.3、通过parent路径名字符串和child路径名字符串创建一个新File实例。
File(String parent,String child)
1.4、通过将给定的file:URI转换成一个抽象路径名来创建一个新的File实例。
File(URI uri)
1.3、创建File对象成功后,可以使用以下列表中的方法操作文件。
public String getName():返回由此抽象路径名表示的文件或目录的名称。
public String getParent():返回此抽象路径名的父路径名的路径名字符串,如果没有指定父目录,则返回null。
getParentFile():返回父路径名的抽象路径名。
getPath():将此抽象路径名转换为一个路径名字符串。
public boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
public String getAbsolutePath():返回抽象路径名的绝对路径名字符串。
public boolean canRead():测试应用程序是否可以读取此抽象路径名表示的文件。
public boolean canWrite():测试应用程序是否可以修改此抽象路径名表示的文件。
public boolean exists():测试此抽象路径名表示的文件或者目录是否存在。
public boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
public boolean isFile():是否是一个标准文件。
public long lasModified():返回此抽象路径名表示的文件最后一次被修改的时间。
public long length():返回此抽象路径名表示的文件的长度。
public boolean createNewFile() throws IOException:不存在此文件时,创建新的空文件
public boolean delete():删除此抽象路径名表示的文件或目录。
public void deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
public String[] list():返回此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
public String[] list(FilenameFilter filter):返回此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定的过滤器。
public boolean mkdir():创建此抽象路径名指定的目录。
public boolean mkdirs():创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
public boolean renameTo(File dest):重新命名此抽象路径名表示的文件。
public boolean setLastModified(long time):设置由此抽象路径名所指定的文件或目录的最后一次修改时间。
public boolean setReadOnly():标记此抽象路径名指定的文件或目录,以便只可以对其进行读操作。
public static File createTempFile(String prefix,String suffix,File directory) throws IOException:在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
public static File createTempFile(String prefix,String suffix) throws IOException:在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
public int compareTo(File pathname):按字母顺序比较两个抽象路径名
public int compareTo(Object o):按字母顺序比较抽象路径名与给定对象。
public boolean equals(Object obj):测试此抽象路径名与给定对象是否相等。
public String toString():返回此抽象路径名的路径名字符串。
2. Java FIleReader类
FileReader类从InputStreamReader类继承而来,该类按字符读取流中数据,可以通过以下几种构造方法创建需要的对象。
2.1、在给定从中读取数据的File的情况下创建一个新的FileReader。
FileReader(File file);
2.2、在给定从中读取数据的FileDescriptor的情况下创建一个新
FileReaderFileReader(FileDescriptor fd);
2.3、在给定从中读取数据的文件名的情况下创建一个新FileReader。
FileReader(String fileName)
创建FileReader对象成功后,有以下方法可使用。
public int read() throws IOException:读取单个字符,返回一个int型变量代表读取到的字符。
public int read(char[] c, int offset, int len):读取字符到c数组,返回读取到字符的个数。
- package cuiyuee;
- import java.io.*;
- public class FileReaderTest {
- public static void main(String args[])throws IOException{
- File file = new File("Hello1.txt");//创建文件
- file.createNewFile();//创建FileWriter对象
- FileWriter writer = new FileWriter(file);
- //向文件写入内容
- writer.write("This is an example");
- writer.flush();
- //FileWriter的flush()方法是从OutputStreamWriter中继承来的,其作用就是清空缓冲区并完成文件写入操作的
- writer.close();
- //创建FileReader对象
- FileReader fr = new FileReader(file);
- char[] a = new char[50];
- fr.read(a);//读取数组中的内容
- for(char c:a){
- System.out.println(c);//一个一个打印字符
- }
- fr.close();
- }
- }
FileWriter类从OutputStreamReader类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。
在给出 File 对象的情况下构造一个 FileWriter 对象。
- FileWriter(File file)
在给出 File 对象的情况下构造一个 FileWriter 对象。
- FileWriter(File file, boolean append)
构造与某个文件描述符相关联的 FileWriter 对象。
- FileWriter(FileDescriptor fd)
在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。
- FileWriter(String fileName, boolean append)
- 常用方法:
public void write(int c)throws IOException:写入单个字符
public void write(char[] c, int offset, int len):写入字符数组中开始为offset长度为len的某一部分。
public void write(String s, int offset, int len):写入字符串中开始为offset长度为len的某一部分。
- package cuiyuee;
- import java.io.*;
- public class FileWriterTest {
- public static void main(String[] args)throws IOException{
- // TODO Auto-generated method stub
- File file = new File("F:\\today.txt");
- if(!file.exists()){//如果文件不存在,就在F盘下创建today.txt文件
- file.createNewFile();
- }
- FileWriter writer = new FileWriter(file);
- writer.write("Hello,I Love You.");
- writer.flush();
- writer.close();
- //创建FileReader对象
- FileReader fr = new FileReader(file);
- char[] a = new char[50];
- fr.read(a);
- for(char c:a){
- System.out.println(c);
- }
- fr.close();
- }
- }
四、Java中的目录
File类中有两个方法可以用来创建文件夹
mkdir():成功返回true,失败返回false,失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
mkdirs():创建一个文件夹和它所有的父文件夹。
- package cuiyuee;
- import java.io.File;
- import java.io.File.*;
- public class DirTest {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String dirname = "F:/tmp/user/java/bin";
- //'\'在Java中是转义字符,所以建议在Windows环境和Linux环境下,用/,创建目录用/
- File d = new File(dirname);
- d.mkdirs();
- }
- }
删除目录或文件
删除文件可以使用java.io.File.delete()方法。
测试目录F:\java\childDirectory
- package cuiyuee;
- import java.io.File.*;
- import java.io.File;
- public class DeleteFile {
- public static void deleteFolder(File folder){
- File[] files = folder.listFiles();
- if(files!=null){
- for(File f:files){
- if(f.isDirectory()){
- deleteFolder(f);
- }else{
- f.delete();
- }
- }
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- File folder = new File("F:\\java");
- deleteFolder(folder);
- }
- }
Java的Stream流的更多相关文章
- Java之Stream流
Stream流的初步学习 初次学习Stream流的学习笔记,学习之前先了解一下函数式接口 概述 API是一个程序向使用者提供的一些方法,通过这些方法就能实现某些功能.所以对于流API来 说,重点是怎么 ...
- 简洁方便的集合处理——Java 8 stream流
背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...
- Java的Stream流式操作
前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什 ...
- Java 之 Stream 流
Stream流 在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端 一.传统遍历 1.传统集合的多步遍历代码 几乎所有的集合(如 ...
- Java 8 Stream流编程学习
本文是自己学习菜鸟教程中总结的笔记,用于快速找代码,完整的文档见菜鸟教程:Java 8 Stream Stream 使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达 ...
- 【重学Java】Stream流
Stream流 体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把&q ...
- Java基础 | Stream流原理与用法总结
Stream简化元素计算: 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream: ...
- Java中Stream流相关介绍
什么是Stream? Stream是JDK8 API的新成员,它允许以声明性方式处理数据集合 特点 代码简洁: 函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环 多核友好 ...
- java使用stream流批量读取并合并文件,避免File相关类导致单文件过大造成的内存溢出。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
随机推荐
- Rsyslog+ELK日志分析系统
转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...
- ubuntu16.04 安装 nginx 服务器
在线安装 apt-get install nginx 说明 启动程序文件在/usr/sbin/nginx 日志放在了/var/log/nginx中,分别是access.log和error.log 并已 ...
- [C语言] 数据结构概述
1.数据结构概述 定义 我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中, 以及在此基础上为实现某个功能(比如查找.删除.查找.某个元素,对所有元素进行排序)而 ...
- ios开发 学习积累20161024~20161026
打算转ios开发工程师的岗位 今天看了下视频,自己吭呲吭呲几下开始写UI 先把Xcode8 的界面总结下 navigator ['nævɪɡetɚ] 导航器.浏览器 symbol navigator ...
- 04-Tomcat体系结构与插件配置
一.发布程序详解 Context docBase:web应用的文件路径 path:URL入口 reloadable:字节码变化服务器是否重新加载web应用 二.tomcat服务器体系结构 1.Serv ...
- Windbg 脚本命令简介 二, Windbg command
Windbg 脚本命令简介 二, Windbg script command $<, $><, $$<, $$><, $$>a< (Run Scri ...
- Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)
在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...
- 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
转自: https://blog.csdn.net/eson_15/article/details/51475431 上一节我们使用了Java mail完成了给买家发送邮件的功能,还遗留一个功能,就 ...
- hdu 3474 Necklace 单调队列
Necklace Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- linux 查看在线服务进程
输入命令:netstat -ltunp 注意,这个-与l之间是没有空格的 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就 ...