import java.io6_java io

8541e9e7b9c2

Paste_Image.png

8541e9e7b9c2

Paste_Image.png

一、File类

1.public static final String pathSeparator 表示路径的分隔符(windows是“;”)

2.public static final String separator 表示路径的分隔符(windows是“\”)

3.public File(String pathname) 创建File类对象,传入完整路径

4.public boolean createNewFile()throws IOException 创建新文件

5.public boolean delete() 删除文件

6.public boolean exists() 判断文件是否存在

7.public boolean isDirectory() 判断给定的路径是否在一个目录

8.public long length() 返回文件的大小

9.public String[] list() 列出指定目录的全部内容,只是名称

10.public File[] listFiles() 列出指定目录的全部内容,会有路径

11.Public Boolean mkdir() 创建一个目录

12.Public Boolean renameTo(File dest) 为已有的文件重命名

 
 

import java.io.File;

import java.io.IOException;

public class Test3 {

public static void main(String[] args) {

File f=new File("d:"+File.separator+"test.txt");

if(f.exists()){

f.delete();

}else{

try {

f.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

二、字节流与字符流

在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)

字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream

 
 

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class Test11 {

public static void main(String[] args) throws IOException {

File f = new File("d:" + File.separator+"test.txt");

OutputStream out=new FileOutputStream(f);//如果文件不存在会自动创建

String str="Hello World";

byte[] b=str.getBytes();

out.write(b);//因为是字节流,所以要转化成字节数组进行输出

out.close();

}

}

以上输出只会进行覆盖,如果要追加的话,请看FileOutputStream类的另一个构造方法:

public FileOutputStream(File file,boolean append)throws FileNotFoundException

在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。

 
 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

public class Test13 {

public static void main(String[] args) throws IOException {

File f = new File("d:" + File.separator+"test.txt");

InputStream in=new FileInputStream(f);

byte[] b=new byte[(int) f.length()];

in.read(b);

in.close();

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

}

}

在程序中一个字符等于两个字节,那么java提供了Reader、Writer两个专门操作字符流的类。

字符流的操作比字节流操作好在一点,就是可以直接输出字符串了,不用再像之前那样进行转换操作了。

 
 

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

public class Test16 {

public static void main(String[] args) throws IOException {

File f = new File("d:" + File.separator+"test.txt");

Writer out=new FileWriter(f);

String str="Hello World";

out.write(str);

out.close();

}

}

 
 

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

public class Test19 {

public static void main(String[] args) throws IOException {

File f = new File("d:" + File.separator+"test.txt");

Reader input=new FileReader(f);

char[] c=new char[1024];

int temp=0;

int len=0;

while((temp=input.read())!=-1){

c[len]=(char) temp;

len++;

}

input.close();

System.out.println(new String(c,0,len));

}

}

就字节流与字符流抽象类中的方法来看其实方法名,返回值类型等都很相似,只是在传入参数部分,字节流的write()方法需要传入的是字节数组,字符流的write()方法需要传入的是字符数组(String也算字符数组?)但是我们都知道字符数组和字节数组是很容易通过getBytes()和new String()来互换的。字节流和字符流的根本区别显然不在此处,那么到底字节流和字符流的主要区别是什么呢?

1.字节流在操作时不会用到缓冲区(内存),是直接对文件本身进行操作的。而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

2.在硬盘上的所有文件都是以字节形式存在的(图片,声音,视频),而字符值在内存中才会形成。

字节流在操作的时候本身是不会用到缓冲区(内存)的,是对文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

什么叫缓冲区?

在很多地方都碰到缓冲区这个名词,那么到底什么是缓冲区?又有什么作用呢?

回答:缓冲区可以简单地理解为一段内存区域。可以简单地把缓冲区理解为一段特殊的内存。某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

从JDK文档中可以知道FileOutputStream是OutputStream的直接子类。FileInputStream也是InputStream的直接子类,但是在字符流文件的两个操作类却有一些特殊,FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类,而FileReader也不直接是Reader的子类,而是InputStreamReader的子类,那么从这两个类的继承关系就可以清楚的发现,不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入输出流的。也就是说,传输或者从文件中读取数据的时候,文件里真正保存的数据永远是字节。

那开发中究竟用字节流好还是用字符流好呢?

在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。

字符流只能对文本文件进行读取, 他比字节流对文本文件的操作效率高。字节流主要是对非文本文件(如一些媒体文件 :图片,电影,音乐等)进行操作的。注意:字节流可以对所有类型的文件进行操作。如果用字节流操作文本文件,没有字符流操作文本文件 效率高。例如txt、exel文件可以用字符流,针对视频文件、图片文件等实用字节流。如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

三、ByteArrayInputStream、ByteArrayOutputStream

之前所讲解的程序中,输出和输入都是从文件中来得,当然,也可以将输出的位置设置在内存之上,此时就要使用ByteArrayInputStream、ByteArrayOutputStream.以下是以内存操作流完成的一个大小写字母转换的程序:

 
 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class Test22 {

public static void main(String[] args) throws IOException {

String str="HELLO WORlD!!!";

InputStream input=new ByteArrayInputStream(str.getBytes());

OutputStream output=new ByteArrayOutputStream();

int temp=0;

while((temp=input.read())!=-1){

output.write(Character.toLowerCase(temp));

}

input.close();

output.close();

System.out.println(output.toString());

}

}

五、BufferedReader

如果想要接收任意长度的数据,而且避免乱码产生,就可以使用BufferedReader类

public class BufferedReader extends Reader

因为输入的数据有可能出现中文,所以,此处使用字符流完成。BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。System.in本身表示的是InputStream(字节流),现在要求接收的是一个字符流,需要将字节流变成字符流才可以,所以要用InputStreamReader

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Test33 {

public static void main(String[] args) throws IOException {

BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));

String str=reader.readLine();

System.out.println(str);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这些是在Java程序中导入的库。 - javax.swing.*:这是Swing GUI工具包,用于创建图形用户界面。 - java.util.*:这是Java的工具包,包含了一些常用的类和接口,如集合、日期和随机数生成器等。 - java.io.File:这是JavaIO包中的文件类,用于操作文件和目录。 - java.io.FileWriter:这是用于向文件中写入文本的类。 - java.io.IOException:这是JavaIO包中的异常类,表示输入输出错误。 ### 回答2: 这段代码是Java语言中的导入语句,用于引入相应的类和库。 1. `import javax.swing.*;` :该语句表示导入`javax.swing`包中的所有类。`javax.swing`包是Java提供的用于创建和管理图形界面的一套类库,包含了窗口、按钮、文本框等组件,以及用于控制用户界面的相关方法和功能。 2. `import java.util.*;` :该语句表示导入`java.util`包中的所有类。`java.util`包是Java提供的一套常用的工具类集合,包含了许多用于集合、日期、随机数、正则表达式等操作的类和接口。 3. `import java.io.File;` :该语句表示导入`java.io`包中的`File`类。`java.io`包提供了用于处理输入输出的类和接口,`File`类用于表示文件和目录的抽象路径名。 4. `import java.io.FileWriter;` :该语句表示导入`java.io`包中的`FileWriter`类。`FileWriter`类是`java.io`包提供的用于写入字符流到文件的类。 5. `import java.io.IOException;` :该语句表示导入`java.io`包中的`IOException`类。`IOException`类是`java.io`包提供的用于处理输入输出异常的类。 这些导入语句的作用是引入相应的类和库,以便在代码中使用这些类的功能和方法。通过导入这些类,程序员可以直接使用对应类的功能,而无需自己编写相应的代码。 ### 回答3: 这段代码是一个Java程序中的导入语句。它们被用来引入程序中所需的类和接口。 "import javax.swing.*;" 表示引入了Swing包中的所有类和接口。Swing是Java提供的一个用于创建图形用户界面(GUI)的框架,它提供了一些用于创建按钮、文本框、标签等组件的类和接口。 "import java.util.*;" 表示引入了java.util包中的所有类和接口。java.util是Java提供的一个工具类库,其中包含了一些用于处理数据集合、日期、时间等的类和接口。 "import java.io.File;" 引入了java.io包中的File类。File类用于表示文件或目录的抽象路径名,并提供了一些用于操作文件和目录的方法。 "import java.io.FileWriter;" 引入了java.io包中的FileWriter类。FileWriter类用于将字符写入文件,提供了一些用于将字符写入文件的方法。 "import java.io.IOException;" 引入了java.io包中的IOException类。IOException是一个异常类,当发生IO(输入/输出)错误时,可以通过抛出或捕获此异常来处理错误情况。 通过引入这些类和接口,我们可以在程序中使用它们提供的功能,如创建图形用户界面、操作文件和目录、处理数据集合等。当我们需要使用这些功能时,只需要编写相应的代码,并通过这些导入语句引入所需的类和接口即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值