介绍Java IO流前,先来明确一下IO流的概念。IO(Input/Output)即输入/输出操作,是计算机应用程序与外部世界(用户、文件)进行交互的重要手段。Java IO流是Java程序中用于读写数据的一种机制,Java为此提供了一系列的API以便于开发者使用。
Java IO流分为两种:字节流和字符流。字节流操作所有类型的文件(如音频、视频、图片等),而字符流主要用于操作文本文件(如txt文件)。Java IO流又分为四大抽象类:InputStream、OutputStream、Reader、Writer,其中InputStream和OutputStream是字节流的抽象基类,而Reader和Writer是字符流的抽象基类。
以下是这四个抽象类的具体操作和示例:
InputStream:
InputStream是字节输入流的抽象类,它提供了读取数据的方法。对于InputStream的所有实现类,读取数据的方法都具有类似的名称,如read()、available()等。
示例1:从文件读取数据
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
int data;
while ((data = fis.read()) != -1) {
System.out.println((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
示例2:从网络读取数据
URL url = null;
InputStream is = null;
try {
url = new URL("http://www.baidu.com");
is = url.openStream();
int data;
while ((data = is.read()) != -1) {
System.out.println((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
OutputStream:
OutputStream是字节输出流的抽象类,它提供了写入数据的方法。同样,对于OutputStream的所有实现类,写入数据的方法都具有类似的名称,如write()、flush()等。
示例1:将数据写入文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("file.txt");
String data = "Hello, World!";
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
示例2:将数据通过网络写出
URL url = null;
OutputStream os = null;
try {
url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
os = connection.getOutputStream();
String data = "name=value";
os.write(data.getBytes());
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Reader:
Reader是字符输入流的抽象类,它提供了读取数据的方法。同样,对于Reader的所有实现类,读取数据的方法都具有类似的名称,如read()、mark()等。
示例1:从文件中读取数据
FileReader fr = null;
try {
fr = new FileReader("file.txt");
int data;
while ((data = fr.read()) != -1) {
System.out.println((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
示例2:从网络中读取数据
URL url = null;
Reader reader = null;
try {
url = new URL("http://www.baidu.com");
reader = new InputStreamReader(url.openStream());
int data;
while ((data = reader.read()) != -1) {
System.out.println((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Writer:
Writer是字符输出流的抽象类,它提供了写入数据的方法。同样,对于Writer的所有实现类,写入数据的方法都具有类似的名称,如write()、flush()等。
示例1:将数据写入文件
FileWriter fw = null;
try {
fw = new FileWriter("file.txt");
String data = "Hello, World!";
fw.write(data);
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
示例2:将数据通过网络写出
URL url = null;
Writer writer = null;
try {
url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
writer = new OutputStreamWriter(connection.getOutputStream());
String data = "name=value";
writer.write(data);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
以上就是浅谈Java IO流——四大抽象类的完整攻略,希望对读者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈java IO流——四大抽象类 - Python技术站