一、流的概念和作用
1、在JAVA中,流是指傳輸的數據。
2、流是一組有順序的,有起點和終點的字節集合,是對數據傳輸的總稱或抽象。即數據在兩設備間的傳輸稱爲流,流的本質是數據傳輸,根據數據傳輸特性將流抽象爲各種類,方便更直觀的進行數據操作。
二、流的分類
1、輸入流:外部設備-->內存,只能進行讀操作。
2、輸出流:內存-->外部設備,只能進行寫操作。
3、字符流:通過內存把數據寫入到外部設備。
(1)通過內存向外部設備的文件寫入數據的時候,如果該文件不存在,系統幫忙創建。
(2)代碼實例1:
@SuppressWarnings({"resource" })
@Test
public void test01() throws IOException
{
/*
* 字符流
* 通過內存把數據寫入到外部設備
* c:\\ = c:/
* 通過內存向外部設備的文件寫入數據的時候,如果該文件不存在,系統幫忙創建
*/
Writer writer=new FileWriter("D:\\student\\text_test.txt");
writer.write("好好學習,天天上網!");
writer.close();
}
(3)代碼實例2:
@SuppressWarnings({"resource" })
@Test
public void test02() throws IOException
{
/*
* 字符流
* 把外部設備的文件裏的數據讀取到內存中
* char類型的數組,其中的元素沒有賦值之前,判斷是否爲空用利用==0判斷
*/
Reader reader=new FileReader("D:\\student\\text_test.txt");
char[] c=new char[100];
int num=reader.read(c);
System.out.println(num);
for(char h:c)
{
if(h!=0)
{
System.out.println(h);
}
}
reader.close();
}
4、字節流:把外部設備的文件裏的數據讀取到內存中。
(1)char類型的數組,其中的元素沒有賦值之前,判斷是否爲空用利用==0判斷。
(2)代碼實例1:
@SuppressWarnings({ "unused", "resource" })
@Test
public void test03() throws IOException
{
/*
* 字節流
* 輸入到內存
* 字節類型的數組判斷字節是否爲空使用==0
*/
InputStream is=new FileInputStream("D:\\student\\text_test.txt");
byte[] b=new byte[100];
int num=is.read(b);
for(byte y:b)
{
if(y!=0)
{
System.out.println(y);
}
}
is.close();
}
(3)代碼實例2:
@SuppressWarnings({ "unused", "resource" })
@Test
public void test04() throws IOException
{
/*
* 字節流
* 輸出到外部設備
*/
InputStream is=new FileInputStream("D:\\student\\text_test.txt");
byte[] b=new byte[100];
int num=is.read(b);
OutputStream os=new FileOutputStream("D:\\student\\demo.txt");
os.write(b);
is.close();
os.close();
}
(4)代碼實例3:
@SuppressWarnings("unused")
@Test
public void test05()
{
File file=new File("D:\\student\\demo\\demo");
// System.out.println(file.getName());//獲得文件名
// System.out.println(file.getParent());//獲得該文件所在路徑
// System.out.println(file.getParentFile());//獲得該文件所在路徑
// System.out.println(file.getPath());//絕對路徑
// System.out.println(file.isDirectory());
file.mkdirs();//創建目錄包括其子目錄(創建多級目錄)
file.mkdir();//創建一級目錄
}
(5)代碼實例4:
@Test
public void test06() throws IOException
{
File file=new File("D:\\student\\text_test.txt");
file.createNewFile();//創建新文件
System.out.println(file.exists());//判斷指定路徑下的問價你是否存在
file.delete();//刪除指定路徑下的文件
}
5、對象流
(1)代碼實例1:
@Test
public void test07() throws Exception
{
/*
* 對象流
*/
//把對象寫入文件
List<Student> list = new ArrayList<Student>();
Student stu1 = new Student(1001,"admin");
Student stu2 = new Student(1002,"root");
Student stu3 = new Student(1003,"scoot");
list.add(stu1);
list.add(stu2);
list.add(stu3);
//對象流操作,直接寫入或者讀入對象
FileOutputStream fos = new FileOutputStream("D:\\student\\demo.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//可以直接寫出對象
oos.writeObject(list);
oos.flush();
oos.close();
}
(2)代碼實例2:
@Test
public void test08() throws Exception
{
FileInputStream fis = new FileInputStream("D:\\student\\demo.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
@SuppressWarnings("unchecked")
List<Student> stuList = (ArrayList<Student>)ois.readObject();
ois.close();
for (int i = 0; i < stuList.size(); i++)
{
Student stu = stuList.get(i);
System.out.println(stu.getId()+" "+stu.getName());
}
}
6、字符緩衝流
@SuppressWarnings("unused")
@Test
public void test09() throws Exception
{
/*
* 字符緩衝流
* 讀取數據
*/
List<String> ls=new ArrayList<String>();
Reader is = new FileReader("D:\\student\\demo.txt");
BufferedReader br=new BufferedReader(is);
String str=null;
while((str=br.readLine())!=null)
{
System.out.println(str);
ls.add(str);
}
br.close();
Writer wr=new FileWriter("D:\\student\\text_test.txt");
// BufferedWriter bw=new BufferedWriter(wr);
// for(String s:ls)
// {
// bw.write(s+"\\");
// }
for(String s:ls)
{
wr.write(s);
}
//bw.close();
wr.close();
}
7、字節緩衝流
@Test
public void test10() throws Exception
{
/*
* 字節緩衝流
*/
OutputStream out=new FileOutputStream("D:\\student\\text_test.txt");
//根據字節輸出流構建字節緩衝流
BufferedOutputStream buf=new BufferedOutputStream(out);
String data="好好學習,天天向上";
buf.write(data.getBytes());//寫入緩衝區
buf.flush();
buf.close();
out.close();
}
8、其它流類庫