java打印工具类_Java工具类-输入输出流-程序员宅基地

技术标签: java打印工具类  

Java工具类-输入输出流

输入输出流

1.概念

输入输出流:文件复制,上传

输出流: System.out.println() 写操作,程序将字符流写入到“目的地”,比如打印机和文件等

输入流 :Scanner sc =new Scanner(System.in) 读操作

2.File类

文件:相关记录或放在一起的数据集合

java.io.File类

package FileDemo;

import java.io.File;

import java.io.IOException;

public class FileDemo {

public static void main(String[] args) {

// 创建对象

File file1=new File("E:\\JavaProject\\FileProj\\imooc\\io\\abc.txt");

//File file2=new File("E:\\JavaProject\\FileProj","imooc\\io\\score.txt");

//判断是文件还是目录

System.out.println("是否是目录: "+ file1.isDirectory());

System.out.println("是否是文件: "+ file1.isFile());

//创建目录

// File file3=new File("E:\\JavaProject\\FileProj\\imooc\\set\\HashSet");

// if(!file3.exists()){

// file3.mkdirs();

// }

//创建文件

if(!file1.exists()) {

try {

file1.createNewFile();

//是否是绝对路径

System.out.println(file1.isAbsolute());

//获取相对路径

System.out.println(file1.getPath());

//获取绝对路径

System.out.println(file1.getAbsolutePath());

//获取文件名

System.out.println(file1.getName());

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

3.字节流

3.1 输入字节

FileInputStream 适用于 二进制

从文件系统中的某个文件中获得输入字节

用于读取诸如图像数据之类的原始字节流

read() read(byte[] b) read(byte[] b int off, int len) close()

package FileDemo;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class FileInputDemo2 {

public static void main(String[] args) {

try{

FileInputStream fis=new FileInputStream("imooc.txt"); //这个是放在该Project当前目录下的

//1.一个一个读取

int n=0;

while((n=fis.read())!=-1) {

System.out.println((char)n);

}

fis.close();

//2.存放到数组中

byte[] b=new byte[100];

fis.read(b,0,9);

//System.out.println(b);

for(byte bb:b){

System.out.println((char) bb);

}

System.out.println(new String(b));

fis.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e){

e.printStackTrace();

}

}

}

3.2 输出字节类

write(int b) write(byte[] b) write(byte[] b,int off,int len) close()

3.2.1 读取字节

package FileDemo;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class FileOutputDemo {

public static void main(String[] args) {

FileOutputStream fos;

FileInputStream fis;

try{

fos=new FileOutputStream("imooc.txt",false); // append追加

fis=new FileInputStream("imooc.txt");

fos.write(50);

fos.write('a');

System.out.println(fis.read());

System.out.println((char)fis.read());

fos.close();

fis.close();

} catch(FileNotFoundException e){

e.printStackTrace();

} catch(IOException e) {

}

}

}

3.2.2 复制文件

package FileDemo;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class FileOutputDemo2 {

// 复制文件使用输出字节流

public static void main(String[] args) {

try {

FileInputStream fis = new FileInputStream("happy.jpg");

FileOutputStream fos=new FileOutputStream("happycopy2.jpg");

int n=0;

byte[] b=new byte[1024];

while((n=fis.read(b))!=-1) {

//System.out.println(n); 图片二进制流

fos.write(b,0,n); //保证文件复制前后数据大小一致

}

fis.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

3.2.3 缓冲字节流

BufferInputStream BufferOutputStream。搭配FileInputStream/OutputStream使用,加快读写速度,先从文件读取,然后通过缓冲流都入到程序中

比较下面两个程序的运行时间:

常规复制,测试文件为200M的视频文件

package FileDemo;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class FileOutputDemo2 {

// 复制文件使用输出字节流

public static void main(String[] args) {

try {

long startTime=System.currentTimeMillis();

FileInputStream fis = new FileInputStream("test.mp4");

FileOutputStream fos=new FileOutputStream("testcopy1.mp4");

int n=0;

byte[] b=new byte[2048];

while((n=fis.read(b))!=-1) {

//System.out.println(n); 图片二进制流

fos.write(b,0,n); //保证文件复制前后数据大小一致

}

fis.close();

fos.close();

long endTime=System.currentTimeMillis();

System.out.println(endTime-startTime); // 742

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

缓冲字节流复制

package FileDemo;

import java.io.*;

public class BufferedCopyFile {

public static void main(String[] args) {

try {

long startTime=System.currentTimeMillis();

FileOutputStream fos=new FileOutputStream("test.mp4");

BufferedOutputStream bos=new BufferedOutputStream(fos);

FileInputStream fis = new FileInputStream("testcopy2.mp4");

BufferedInputStream bis = new BufferedInputStream(fis);

int n=0;

byte[] b=new byte[2048];

while((n=bis.read(b))!=-1) {

//System.out.println(n); 图片二进制流

bos.write(b,0,n); //保证文件复制前后数据大小一致

bos.flush();

}

fos.close();

bos.close();

fis.close();

bis.close();

long endTime=System.currentTimeMillis();

System.out.println(endTime-startTime); // 640

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

742 vs 640

4.字符流

适用于处理字符

字节字符转换流 字符输入流 Reader 字符输出流 Writer 缓冲字符流

package Charstream;

import java.io.*;

public class BufferedReaderDemo {

public static void main(String[] args) {

try {

FileInputStream fis=new FileInputStream("imooc2.txt");

InputStreamReader isr=new InputStreamReader(fis,"GBK");

BufferedReader br=new BufferedReader(isr);

FileOutputStream fos=new FileOutputStream("imooc3.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK"); //isr osw编码保持一致,默认UFT-8

BufferedWriter bw=new BufferedWriter(osw);

int n=0;

char[] cbuf=new char[10];

while((n=br.read(cbuf))!=-1) {

//String s=new String(cbuf,0,n);

//System.out.println(s);

bw.write(cbuf,0,n);

bw.flush();

}

fis.close();

isr.close();

br.close();

fos.close();

osw.close();

bw.close();

} catch(FileNotFoundException e) {

e.printStackTrace();

} catch(IOException e) {

e.printStackTrace();

}

}

}

1bit(位)表示一个二进制位,0/1

byte(字节) ,有8个bit位,首位是符号位

1 char = 2 byte = 16 bit

00000001 = 1

10000000 = -1

二进制区间[127~-128]

0111111 = 127

1111111 =-128

在Java中,程序中所有的数据都是以流的方式进行传输或保存的,流中保存的实际上是字节文件,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。

虽然1 bit是数据真正的最小单位,但是保存信息太少,System.out.println(ois.readBoolean());

5.对象的序列化和反序列化

创建一个类,继承Serializable接口→创建对象→将对象写入文件→从文件读取对象信息

对象输入流:ObjectInputStream 对象输出流:ObjectOutputStream

序列化:把Java对象转换成字节序列的过程,写

反序列化:把字节序列恢复为Java对象的过程,读

package ObjectSerizable;

import java.io.*;

public class GoodsTest {

public static void main(String[] args) {

Goods goods1=new Goods("gd001","电脑",3000);

try {

FileOutputStream fos=new FileOutputStream("imooc.txt");

ObjectOutputStream oos=new ObjectOutputStream(fos);

FileInputStream fis=new FileInputStream("imooc.txt");

ObjectInputStream ois=new ObjectInputStream(fis);

//将Goods对象信息写入文件

oos.writeObject(goods1);

oos.writeBoolean(true);

oos.flush();

// System.out.println(ois.readBoolean()); 不要后写先读,无法匹配上

try {

Goods goods=(Goods)ois.readObject();

System.out.println(goods);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

//System.out.println(ois.readBoolean()); //写入什么,读入什么,顺序要一致

//先写先读

fos.close();

oos.close();

fis.close();

ois.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

6.字节流 VS 字符流

1 char = 2 byte = 16 bit

二进制的数据都是以字节作为基本存储单位,一切都是字节流,其实没有字符流,字符知识根据编码集对字节流翻译之后的产物

例如 Java中的8中基本数据类型,Java使用Unicode,用char这个数据类型表示一个多字节的字符

字节流就是普通的二进制流,都出来的是bit,字符流就是在字节流的基础按照字符编码处理,处理的是 char,前者可以表达所有东西,后者只能是字符。

Java工具类-输入输出流 相关文章

Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

内容简介 本文主要说明在Java8及以上版本中,使用stream().filter()来过滤一个List对象,查找符合条件的对象集合。 List对象类(StudentInfo) public class StudentInfo implements ComparableStudentInfo { //名称 private String name; //性别 true男 fal

Java8使用Stream流实现List列表的查询、统计、排序、分组

https://blog.csdn.net/pan_junbiao/article/details/105913518 Java8提供了Stream(流)处理集合的关键抽象概念,它可以对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。Stream API 借助于同样新出现的Lambda表达式,极大的提高编程效率

JVM系列(三):JVM创建过程解析

上两篇中梳理了整个java启动过程中,jvm大致是如何运行的。即厘清了我们认为的jvm的启动过程。但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等。把最核心的loadJavaVM()交给了一个dll或者so库。也就是真正的jvm我们并没有接触到,我们仅看了一

构造文件输入流

我们可以构造一个文件输入流,然后再利用read方法读取文件中的一个字节: 1 package com.hw.file0205; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 7 public class TestInputStream { 8

JavaFx动画-淡入淡出

import javafx.animation.Animation;import javafx.animation.FadeTransition;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.*;import javafx.scene.layout.BorderPane;import javafx.scene.layout.StackPa

Java流程控制01

Java流程控制 用户交互Scanner Scanner对象 next() 一定要读取到有效字符后才可以结束输入 输入有效字符前遇到 空白 ,next()方法会自动抹去(hello world) 只有输入有效字符后才将其后面输入的空白作为 分隔符 或者 结束符 next()不能得到带有空格的字符串

JavaFx动画-路径移动

import javafx.animation.Animation;import javafx.animation.PathTransition;import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.TextArea;import javafx.scene.layout.Pane;import javafx.scene.paint.Color;i

未解决

java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([192.168.2.16:8848]) tried: failed to req API:192.168.2.16:8848/nacos/v1/ns/instance. code:503 msg: server is DOWN now, please try again later!at co

JavaWeb项目实战-油画商城

整个项目都已经上传到github-mmgallery上,供有需要的读者使用,主要文件来自于csdn,区别是csdn中的项目数据存储在MySQL中,本项目数据存储在Xml文件中。课件和学习视频课程来自MK网 Java工程师2020第二阶段。 1.MVC架构模式 早期代码:显示与代码耦合,一

Javaweb基础案例

目录 ??各个文件所在目录 ??文件下载 ??验证码生成 各个文件所在目录 通过HTTPServlet获取 ServletContext context = this.getServletContext(); 获取文件的服务器路径 web目录下的资源访问 String realPath = context.getRealPath("/b.txt");System.out.pri

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39721370/article/details/114956157

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签