Java的IO及路径问题
1.流的类型
根据流动方向的不同,流分为输入流和输出流;
对于输入和输出流,由于传输格式的不同,又分为字节流和字符流:
字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和OutputStream(输出字节流)类;常用于读二进制文件,如图片、声音、影像等文件。
字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,非常适合处理字符串和文本,对于字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类;以字符为单位读取文件,常用于读文本,数字等类型的文件
常用流的结构:
读:
InputStream: FileInputStream : BufferedInputStream
ObjectInputStream
Reader:InputStreamReader :FileReader
BufferedReader :LineNumerReader
写:input-->output,Reader-->Writer
2.学习I/O明白java里的路径很重要:
默认路径:Myeclipse里的默认路径为工程的根目录(即src的上一层目录,与src文件夹在同一目录下)
绝对路径:使用/ 或 \\开头的从根目录出发路径。因为/代表根目录在java中\\与/起同样作用。
相对路径:
1.基于默认路径(即工程)的相对路径 "src/com/lavasoft/res/a.txt"
2.基于该类的相对路径
URL uri = className.class.getResource("/com/lavasoft/res/a.txt"); 这里的 / 表示src根目录
如果用来读取文件,我们还可以使用FileInputStream和FielReader在讲文件的读写前,我们先要了解File类:
File的创建:
public class FileTest { public static void main(String[] args) { File file = new File("text.txt"); //创建文件对象 if(file.exists()){ file.delete(); //如果文件存在则删除 }else{ try { file.createNewFile(); //如果不存在则创建 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
对文件的读取:
过程:将file变成Stream再将Stream变成String
FileInputStream类:
FileInputStream类称为文件输入流,继承于InputStream类,是进行文件读操作的最基本类;
它的作用是将文件中的数据输入到内存中,我们可以利用它来读文件;
由于它属于字节流,因此在读取Unicode字符(如中文)的文件时可能会出现问题。
public class FileInputStreamDemo1 { public static void main(String[] args) { try { File file = new File("test.txt"); //创建文件对象 //使用文件对象创建文件输入流对象,相当于打开文件 FileInputStream fis = new FileInputStream(file); for (int i = 0; i < file.length(); i++) { char ch = (char)(fis.read()); //循环读取字符 System.out.print(ch); } System.out.println(); fis.close(); //关闭流 } catch (FileNotFoundException fnfe) { System.out.println("文件打开失败。"); } catch (IOException ioe) { ioe.printStackTrace(); } } }
//与上面不同这个确定了一次性读取多少个字节存入字节数组中,在从数组中循环取出,数组相当于一个缓冲,提高了效率。
public class FileInputStreamDemo2 { public static void main(String[] args) { try { File file = new File("test.txt"); //创建文件对象 FileInputStream fis = new FileInputStream(file); //根据文件的字节长度创建字节数组,一次性读完 byte[] buf = new byte[(int)(file.length())]; fis.read(buf); //读取文件中的数据存放到字节数组中 String str = new String(buf); //利用字节数组创建字符串 System.out.println(str); //打印字符串 fis.close(); //关闭流 } catch (FileNotFoundException fnfe) { System.out.println("文件打开失败。"); } catch (IOException ioe) { ioe.printStackTrace(); } } }
//同理,文件输出流
FileOutputStream类:
FileOutputStream类称为文件输出流,继承于OutputStream类,是进行文件写操作的最基本类;
它的作用是将内存中的数据输出到文件中,我们可以利用它来写文件。
public class FileOutputStreamDemo1
{
//在函数内部不进行异常处理,将异常抛出函数外部
public static void main(String[] args) throws IOException
{
String str = "Hello world!";
File file = new File("test.txt"); //创建文件对象
//通过文件对象创建文件输出流对象
//附加第二个参数true,指定进行文件追加,默认为不追加。也可使用RandomAccessFile来进行追加,该类可一调用seek找到最后一个字符位置,再进行写入,所以该类还可以用来做随机读取(读取位置可设定)。
FileOutputStream fos = new FileOutputStream(file, true);
//逐个将字节逐个写入到文件中
for (int i = 0; i < str.length(); i++)
{
fos.write(str.charAt(i));
}
fos.close(); //关闭流
}
}
public class FileOutputStreamDemo2 { //在函数内部不进行异常处理,将异常抛出函数外部 public static void main(String[] args) throws Exception { String str = "I Love Java"; //通过文件名创建文件输出流对象 FileOutputStream fos = new FileOutputStream("test.txt"); //将字符串转化为字节数组 byte[] buffer = str.getBytes(); //将字节数组中包含的数据一次性写入到文件中 fos.write(buffer); //关闭流 fos.close(); } }
FileInputStream/FileOutputStream小结:
FileInputStream类和FileOutputStream类是成对出现的,一个进行输入(读文件)操作,一个进行输出(写文件)操作;
由于采用字节方式进行数据传输,不必考虑数据的格式问题,这两个类对文件操作的效率较高;
可以使用这两个类完成复制文件的操作。
public class CopyFileDemo { public static void main(String[] args) throws IOException { File srcFile = new File("src.dat"); //源文件对象 File destFile = new File("dest.dat"); //目标文件对象 if (!(destFile.exists())) { //判断目标文件是否存在 destFile.createNewFile(); //如果不存在则创建新文件 } //使用源文件对象创建文件输入流对象 FileInputStream fis = new FileInputStream(srcFile); //使用目标文件对象创建文件输出流对象 FileOutputStream fos = new FileOutputStream(destFile); byte[] buf = new byte[1024]; //创建字节数组,作为临时缓冲 System.out.println("开始复制文件..."); while (fis.read(buf) != -1) { //循环从文件输入流中读取数据到数组 fos.write(buf); //从数组中写入到文件输出流中 } System.out.println("文件复制成功!"); fis.close(); //关闭流 fos.close(); } }
字符流:
FileInputStram类和FileOutputStream类虽然可以高效率地读/写文件,但对于Unicode编码的文件,使用它们有可能出现乱码;
考虑到Java是跨平台的语言,要经常操作Unicode编码的文件,使用字符流操作文件是有必要的,且字符类型可以用new inputStreamReader(InputStream in,String charset )将字节流转换为GBK等字符格式;
使用字符流将涉及到以下4个类:(Reder和Writer的子类)
FileReader类和FileWriter类;
BufferedReader类和BufferedWriter类。
FileReader类:
FileReader类称为文件读取流,允许以字符流的形式对文件进行读操作,其构造方法有3种重载方式,以下是常用的几种:
该类将从文件中逐个地读取字符,效率比较低下,可以一次读取多个字符,采用char数组做缓冲(类似于上面一次读取多个字节的代码)。
FileReader配合BufferedReader读文件示例:将FileReader包装到BufferedReader可以一次读一行,常用于读面向行的格式化文件
public class RraderDemo { public static void main(String[] args) throws IOException { File file = new File("test.txt"); //通过文件对象创建文件读取流对象 FileReader fr = new FileReader(file); //将文件读取流包装成缓冲读取流 BufferedReader br = new BufferedReader(fr); String str; while ((str = br.readLine()) != null) //逐行读取数据 { System.out.println(str); } br.close(); //关闭流 fr.close(); //关闭流 } }
//同理利用FileWriter和BufferedWriter可以写如数据
相关推荐
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...
Java IO 详解 Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File ...
Java IO编程是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库,使得开发者能够高效地进行数据的读取、写入、流的管理和转换。在这个集合中,我们主要探讨的是Java IO在文件读写方面的实践应用。 一...
在Java中,`java.io.File`类用于表示文件和目录路径名的抽象表示。它提供了创建、删除、重命名文件或目录的方法,以及获取文件属性(如大小、最后修改时间等)的功能。例如,`new File("path/to/file")`可以创建一个...
### Java IO流知识点详解 #### 一、Java IO流概述 在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库...
Java IO流是Java平台中的核心概念,用于处理输入和输出数据。在Java中,I/O流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节的数据,而字符流处理Unicode字符集中的字符。Java...
在Java编程语言中,`IO`(Input/Output)是处理数据输入和输出的核心部分,尤其是在处理大数据量文件时显得尤为重要。Java IO API提供了一系列类和接口,使得开发者能够高效地读取、写入和操作文件。下面我们将深入...
以上就是关于Java IO读写文件的基本操作及如何从一个文件中筛选数据并保存到另一个文件中的详细解析。通过这种方式,我们可以有效地处理文本文件中的数据,实现数据的筛选和转换功能。这对于处理大量数据、进行数据...
在Java中,`java.io.File`类用于封装文件路径,可以用来创建文件对象,并且提供了许多与文件和目录交互的方法。 - 创建File对象: ```java File file = new File("a.txt"); ``` - 常用方法介绍: - `...
Java IO(Input/Output)操作是Java编程中的基础部分,主要负责数据的读取和写入。在Java中,InputStream 和 FileOutputStream 是两个重要的类,分别用于处理输入流和输出流,它们构成了Java IO体系的基础。 ...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分。在Java中,IO库提供了大量的类和接口,使得开发者可以方便地读取、写入数据到各种类型的输入输出源,如文件、网络连接、内存缓冲区等。...
Java IO是Java编程语言中用于输入/输出操作的重要部分,它提供了一系列的类和方法来处理数据的读写,文件的创建、删除以及流的管理等。以下是对标题和描述中涉及的知识点的详细说明: 1. **文件对象的生成**: 在...
import java.io.File; public class FileTest { public static void main(String[] args) throws Exception { System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); System...
Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...
在Java编程中,处理中文路径问题是一个常见的挑战,尤其是在Windows操作系统环境下。中文字符在路径中可能会引起编码问题,导致程序无法正确读取或写入文件。这个问题主要涉及到字符编码、文件I/O操作以及系统环境的...
Java 7引入了更强大的文件系统操作API,如 `Files` 类提供了创建、删除、移动文件及获取文件属性的便捷方法,`Path` 类代表文件系统中的路径。 Java IO代码通常涉及上述概念的组合应用,例如,从文件读取数据,...