IO是输入/输出的缩写。
首先在JAVA相关于IO有四个抽象类。分别是InputStream,OutputStream,Reader,Writer。
那什么时候用到字节,什么时候用到字符呢?
字节流:首先二进制必须要用到字节流,以byte存储的。但是读取不了特殊符号,取中文也会有出现乱码的情况。
字符流:以字符以字符串形式存储的,就是字符流。
一般情况下,可以用文本形式打开不乱码的,都是字符流。如果图片、视频等、用字节流。
字符流的输入和输出(将文件夹中的一个txt文件复制到另一个copy文件):
public class FileReaderAndWriteDemo {
public static void main(String[] args) {
Reader reader = null;
Writer writer = null;
File fromFile=new File("D:/io测试文件夹/num1/i am superStar.txt");
File writeFile=new File("D:/io测试文件夹/number/copy.txt");
//判断写入文件的文件夹是否存在,不存在创建一个
IOUntil.HasDictory(writeFile);
//判断写入文件是否存在,不存在创建一个
IOUntil.HasFile(writeFile);
try {
reader=new FileReader(fromFile);
writer=new FileWriter(writeFile);
char[] buffer=new char[10];
while (reader.read(buffer)>0) {
System.out.println(buffer);
writer.write(buffer);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//执行reader.close();
IOUntil.ReaderClose(reader);
//执行writer.close();
IOUntil.WriterClose(writer);
}
}
}
public class IOUntil {
/**
* 判断是否存在file是否存在的文件夹,没有创建文件夹
*
* @param file
*/
public static void HasDictory(File file){
if (!file.getParentFile().isDirectory()) {
file.getParentFile().mkdirs();
}
}
/**
* 判断这个文件是否存在,不存在进行创建
*
* @param file
*/
public static void HasFile(File file){
if (!file.isFile()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 执行reader.close() 方法
* @param reader
*/
public static void ReaderClose(Reader reader){
try {
if (reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 执行writer.close() 方法
* @param reader
*/
public static void WriterClose(Writer writer){
try {
if (writer!=null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 执行in.close() 方法
* @param reader
*/
public static void InputStreamClose(InputStream in){
try {
if (in!=null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 执行out.close() 方法
* @param reader
*/
public static void OutputStreamClose(OutputStream out){
try {
if (out!=null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流的输入输出(以照片为例):
public class PictureDome {
public static void main(String[] args) {
File file=new File("D:/io测试文件夹/num1/一寸.jpg");
File tofile=new File("D:/io测试文件夹/number","oneperson.jpg");
InputStream in =null;
OutputStream out =null;
try {
in = new FileInputStream(file);
out = new FileOutputStream(tofile);
//判断写入文件的文件夹是否存在,不存在创建一个
IOUntil.HasDictory(tofile);
//判断该文件是否存在,不存在创建该文件
IOUntil.HasFile(tofile);
byte[] buffer=new byte[20];
while(in.read(buffer)>0){
out.write(buffer,0, buffer.length);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
IOUntil.InputStreamClose(in);
IOUntil.OutputStreamClose(out);
}
}
}
注意:
1、自己在写程序时,首先要想到的是目标目录是否存在,不存在回报系统找不到指定目录,如果写的file是文件路径(譬如我的例子)
if (!file.getParentFile().isDirectory()) {
file.getParentFile().mkdirs();
}
先需要判断file的文件夹是否是一个文件夹,如果没有会返回false,然后在file.getParentFile().mkdirs();创建多级文件目录。不要直接file.mkdirs();那样你会发现它还创建了一个copy.txt文件夹,运行程序就会报错,因为在windows同一个文件夹下,是不可能出现文件夹和文件同一命名的情况,所以接下来就不会产生真正的copy.txt~
2、写IO操作,一定要记得关闭,不关闭会一直占用。所以finally的好处就是,当try中出现了异常,不往下运行代码时,还会走finally,这样就会使输入和输出关闭。
3、输入和输出需要分别try,如果不那样的话,如果“写”出现异常,那么“读”也将无法关闭。或者在“写”关闭下再加一个finally,确保“写”出现异常,“读”也能进行关闭操作。
相关推荐
内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(>>)和插入运算符(>>)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...
Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...
Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...
### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...
Java输入输出流是Java编程中不可或缺的部分,它用于应用程序与外部设备之间进行数据交换,比如磁盘、网络、键盘和显示器。I/O流是Java中处理输入和输出的基础框架,它提供了一种抽象的方式来处理不同类型的输入源和...
### Java中的标准输入输出流知识点详解 #### 一、Java标准I/O介绍 Java提供了丰富的I/O处理机制,包括标准输入输出流、字节流、字符流等多种方式来处理数据的读取和写入。标准输入输出流是Java中非常基础且重要的...
在Java编程语言中,输入输出流(Input/Output Stream)是处理数据传输的核心部分,尤其在文件操作和网络通信中。对于"java输入输出流学生成绩管理"这个项目,我们可以推断它是一个使用Java I/O流实现的学生分数管理...
《基于对象输入输出流和数据结构的图书管理系统》是一个使用JAVA编程语言开发的DOS版本图书管理系统。这个系统充分利用了JAVA中的对象输入输出流技术以及高效的数据结构,以实现对图书信息的有效管理和操作。 首先...
Java 输入输出流是Java编程语言中处理数据传输的基础机制,主要负责程序与外部资源(如文件、网络连接等)之间的数据交互。Java 提供了多种类型的流,它们分为两大类:字节流(处理单个字节的数据)和字符流(处理...
Java输入输出流是Java编程语言中的核心概念,用于在程序之间、程序与文件系统、网络连接等不同数据源之间传输数据。在这个主题中,我们将深入探讨Java输入输出流的使用,通过具体的代码示例帮助你理解和掌握这个关键...
Java输入输出流是Java编程语言中的核心概念,用于在程序之间、程序与系统资源之间传输数据。这个主题包括了从磁盘、网络、内存到控制台等不同源和目标的数据读写操作。在这个Java作业中,你将深入理解并实践这一关键...
Java输入输出流是Java IO(Input/Output)体系的基础,它是Java处理数据传输的核心机制。在Java中,一切皆为对象,输入输出流也不例外。Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种...
C++输入输出流案例 本文详细介绍了C++输入输出流的概念、类别、对象和常用操作,通过实例代码和图书管理系统的综合案例,巩固文件操作。 一、输入流 C++中输入流主要有三种:cin、getline和get。cin是 istream 类...
Java输入输出流(IO流)是Java编程语言中处理数据传输的核心部分,它允许程序进行数据的读取和写入操作。在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本...
在IT行业中,文件管理和输入输出流是至关重要的概念,尤其对于程序设计而言。"文件管理和输入输出流"这个主题涵盖了Java、C语言、C++、C#以及JSP等多种编程语言中的相关技术,这些技术使得程序员能够有效地读取、...
### 浅谈Java输入输出流 #### 一、引言 Java作为一种广泛应用的编程语言,在处理数据时提供了非常强大且灵活的输入输出功能。然而,Java的输入输出操作可能看起来较为复杂,因为开发者通常需要处理多种不同的对象...
Java 输入输出流实验 本实验主要介绍了 Java 中的输入输出流,包括 DataInputStream、DataOutputStream、PrintStream 等类的使用,以及对象的序列化和反序列化。通过实验,我们可以掌握流的概念分类、字符串常用...
Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它主要用于程序与外部资源之间的数据传输。在Java中,I/O流的概念被用来抽象各种输入源和输出目标,包括键盘、显示器、文件、网络连接等。I/O流的设计遵循...