国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

教你用Java GUI實(shí)現文本文件的讀寫(xiě)

發(fā)布時(shí)間:2021-07-05 18:40 來(lái)源:腳本之家 閱讀:0 作者:wayne_lee_lwc 欄目: 開(kāi)發(fā)技術(shù)

目錄

一、實(shí)驗題目

二、分析

實(shí)驗要求為:

  • 實(shí)現一個(gè)界面,界面中包含一個(gè)文本顯示區和兩個(gè)按鈕(存檔和讀檔)
  • 讀檔按鈕作用是打開(kāi)文件并讀取內容,將內容顯示在文本區中
  • 存檔按鈕作用是將文本區的內容寫(xiě)入到文件中。

簡(jiǎn)單分析一下,可以看出這樣的要求奧,包含的要考察知識點(diǎn)主要有兩個(gè)方向:

  • GUI繪制界面并添加事件
  • 使用IO流對象對文件進(jìn)行讀寫(xiě)

好的小伙伴們,廢話(huà)不多說(shuō),下面就來(lái)的實(shí)現它。

三、實(shí)現

首先,讓我們創(chuàng )建一個(gè)GUI界面,先秉持著(zhù)一切從簡(jiǎn)的設計思想,預計它長(cháng)這樣:

這樣的布局方式,我們可以選擇采用流布局實(shí)現,在容器中直接放入文本顯示區和兩個(gè)按鈕,適當調整窗口大小即可實(shí)現:

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUIDemo extends JFrame{

	//三個(gè)組件
	private JButton saveButton;
	private JButton loadButton;
	private TextArea textArea;
	
	//容器
	private Container container;
	
	public GUIDemo() {
		//設置title
		super("File Demo");
		
		//設置流布局
		setLayout(new FlowLayout());
		
		//獲取容器
		container = getContentPane();
		
		//三個(gè)組件
		textArea = new TextArea();
		saveButton = new JButton("save");
		loadButton = new JButton("load");
		
		//保存文件按鈕點(diǎn)擊事件
		saveButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				System.out.println("存檔成功");
			}
		});
		
		//讀入文件按鈕點(diǎn)擊事件
		loadButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				System.out.println("讀檔成功");
			}
		});
		
		//裝填三個(gè)組件
		container.add(textArea);
		container.add(loadButton);
		container.add(saveButton);
		
		//調整大小
		setSize(500, 300);
		//顯示
		setVisible(true);
	}
	
	public static void main(String[] args) {
		GUIDemo demo = new GUIDemo();
		demo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

代碼的含義都在注釋里面,就不啰嗦講解了。

跑起來(lái)是這個(gè)樣子:


點(diǎn)擊兩下按鈕測試點(diǎn)擊事件,控制臺輸出:

好的,GUI界面設計完畢,下面來(lái)為兩個(gè)按鈕編寫(xiě)點(diǎn)擊事件。

首先要解決的一個(gè)問(wèn)題是“目標文件”。由于題目中沒(méi)有提到目標文件是否需要從文件系統中選取產(chǎn)生,那么我們不妨暫時(shí)將目標文件地址直接在代碼中,令private static final String TARGET_FILE= "./temp.txt";

那么在初始化頁(yè)面時(shí)就應該先創(chuàng )建這個(gè)文件路徑對應的file對象:

//目標文件
	private File targetFile;
...
//創(chuàng  )建目標文件對象
	targetFile = new File(TARGET_FILE);
	if(targetFile.createNewFile()) {
		System.out.println("文件不存在,創(chuàng  )建成功");
	}else {
		System.out.println("文件存在");
	}

這里需要注意幾個(gè)問(wèn)題:

1.創(chuàng )建目標文件需要使用createNewFile()方法,而非mkdir()方法。否則會(huì )創(chuàng )建成為文件夾而非文件

2.createNewFile()方法會(huì )拋出一個(gè)IOException,為了便于處理,這里直接選擇將異常從構造方法和主方法中拋出;



處理好目標文件問(wèn)題,兩次啟動(dòng)程序,可以看到控制臺輸出:



哦吼,文件處理成功。

接著(zhù),就是在為兩個(gè)按鈕添加點(diǎn)擊事件。在下面的處理中,對于IO流的選擇,我們統一選擇字符流.

首先是讀檔按鈕,它的點(diǎn)擊事件邏輯大致為:

1.創(chuàng )建目標文件的輸入字符流

2.從輸入流中讀取文件中的內容并形成結果

3.關(guān)閉輸入流

4.將讀入的結果顯示在文本顯示區中

實(shí)現成為代碼:

//讀入文件按鈕點(diǎn)擊事件
loadButton.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
		try {
			//字符讀入流
			FileReader reader = new FileReader(targetFile);
			
			//讀入緩沖區
			char[] buffer = new char[1024];
			
			//讀入結果
			StringBuffer result = new StringBuffer();
			
			//每次讀入緩沖區的長(cháng)度
			int len;
			
			//從讀入流中讀取文件內容并形成結果
			while((len = reader.read(buffer)) != -1) {
				result.append(buffer,0,len);
			}
			
			//關(guān)閉讀入流
			reader.close();
			
			//更新文本顯示區內容
			textArea.setText(result.toString());
			
			System.out.println("讀檔成功");
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

	}
});

在目標文件中寫(xiě)下Hello World!!,運行程序,點(diǎn)擊load:


nice~~

好的,接下來(lái)就剩下最后一項任務(wù)了,完成存檔!

存檔按鈕的點(diǎn)擊事件應該為:

1.打開(kāi)目標文件字符輸出流

2.獲取當前文本顯示區的內容

3.將文本顯示區的內容通過(guò)輸出流寫(xiě)入文件

4.關(guān)閉輸出流

5.清空文本顯示區

哦吼,最后一條是我加上去的,其實(shí)不清空也可以。

代碼實(shí)現如下:

//保存文件按鈕點(diǎn)擊事件
saveButton.addActionListener(new ActionListener() {
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
		try {
			//打開(kāi)文件字符輸出流
			FileWriter writer = new FileWriter(targetFile);
		
			//獲取文本顯示區文本
			String result = textArea.getText();
			
			//寫(xiě)入文件
			writer.write(result);
			
			//關(guān)閉輸出流
			writer.close();
			
			//清空文本顯示區內容
			textArea.setText("");
			
			System.out.println("存檔成功");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
});

在文本顯示區中輸入Hello Java!!,點(diǎn)擊save:

啥?你說(shuō)文本框里面啥也沒(méi)有?對,因為最后把內容清空了!

四、全部代碼

好了,實(shí)現了上面的全部功能,最后把代碼匯總在這里:

(謹慎抄襲哦)

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GUIDemo extends JFrame{

	private static final String TARGET_FILE = "./temp.txt";
	
	//三個(gè)組件
	private JButton saveButton;
	private JButton loadButton;
	private TextArea textArea;
	
	//容器
	private Container container;
	
	//目標文件
	private File targetFile;
	
	public GUIDemo() throws IOException {
		//設置title
		super("File Demo");
		
		//設置流布局
		setLayout(new FlowLayout());
		
		//獲取容器
		container = getContentPane();
		
		//創(chuàng  )建目標文件對象
		targetFile = new File(TARGET_FILE);
		if(targetFile.createNewFile()) {
			System.out.println("文件不存在,創(chuàng  )建成功");
		}else {
			System.out.println("文件存在");
		}
		
		//三個(gè)組件
		textArea = new TextArea();
		saveButton = new JButton("save");
		loadButton = new JButton("load");
		
		//保存文件按鈕點(diǎn)擊事件
		saveButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				try {
					//打開(kāi)文件字符輸出流
					FileWriter writer = new FileWriter(targetFile);
				
					//獲取文本顯示區文本
					String result = textArea.getText();
					
					//寫(xiě)入文件
					writer.write(result);
					
					//關(guān)閉輸出流
					writer.close();
					
					//清空文本顯示區內容
					textArea.setText("");
					
					System.out.println("存檔成功");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		
		//讀入文件按鈕點(diǎn)擊事件
		loadButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				try {
					//字符讀入流
					FileReader reader = new FileReader(targetFile);
					
					//讀入緩沖區
					char[] buffer = new char[1024];
					
					//讀入結果
					StringBuffer result = new StringBuffer();
					
					//每次讀入緩沖區的長(cháng)度
					int len;
					
					//從讀入流中讀取文件內容并形成結果
					while((len = reader.read(buffer)) != -1) {
						result.append(buffer,0,len);
					}
					
					//關(guān)閉讀入流
					reader.close();
					
					//更新文本顯示區內容
					textArea.setText(result.toString());
					
					System.out.println("讀檔成功");
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				
			}
		});
		
		//裝填三個(gè)組件
		container.add(textArea);
		container.add(loadButton);
		container.add(saveButton);
		
		//調整大小
		setSize(500, 300);
		//顯示
		setVisible(true);
	}
	
	public static void main(String[] args) throws IOException {
		GUIDemo demo = new GUIDemo();
		demo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

开心久久婷婷综合中文字幕| 被老头玩弄邻居人妻中文字幕| 国产三级精品三级在线专1 | 亚洲国产午夜精品理论片| 成人久久精品一区二区三区| 好男人www在线观看视频|