4.5 Java進階(五)I/O流

一、流的概念和作用

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、其它流類庫

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章