Java GUIでテキストファイルの読み書きを教えます。


一、実験テーマ
在这里插入图片描述
二、分析
実験要求は:
  • は、テキスト表示領域と2つのボタン(アーカイブと読み込み)
  • とを含むインターフェースを実現する。
  • 読み取りボタンは、ファイルを開いて内容を読み取り、テキストエリアに表示する役割を果たしています。
  • アーカイブボタンは、テキストエリアの内容をファイルに書き込む役割を果たしています。
  • 簡単に分析してみると、このような要求はオーストリアであることが分かります。知識点を考察するには主に二つの方向があります。
  • GUIは、インターフェースを描画し、イベントを追加する
  • IOストリームオブジェクトを使用してファイルを読み書きする
  • いい仲間たちは、余計なことを言わないで、これを実現します。
    三、実現する
    まず、GUIインタフェースを作りましょう。まず、すべてのシンプルなデザイン思想を持って、このような長さを期待します。
    在这里插入图片描述
    このようなレイアウトでは、コンテナにテキスト表示エリアと2つのボタンを直接入れることで、ウィンドウのサイズを適切に調整することができます。
    
    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{
    
    	//    
    	private JButton saveButton;
    	private JButton loadButton;
    	private TextArea textArea;
    	
    	//  
    	private Container container;
    	
    	public GUIDemo() {
    		//  title
    		super("File Demo");
    		
    		//     
    		setLayout(new FlowLayout());
    		
    		//    
    		container = getContentPane();
    		
    		//    
    		textArea = new TextArea();
    		saveButton = new JButton("save");
    		loadButton = new JButton("load");
    		
    		//          
    		saveButton.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				
    				System.out.println("    ");
    			}
    		});
    		
    		//          
    		loadButton.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				
    				System.out.println("    ");
    			}
    		});
    		
    		//      
    		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);
    	}
    }
    
    
    コードの意味は全部注釈の中にあるので、説明はくどくどしません。
    走るのはこんな感じです。
    在这里插入图片描述
    二つのボタンをクリックしてイベントをテストし、コンソールから出力します。
    在这里插入图片描述
    はい、GUIインターフェースの設計が終わりました。次は二つのボタンのためにクリックイベントを作成します。
    まず解決するべき問題の一つは「ターゲットファイル」です。ターゲットファイルがファイルシステムから選択されて生成される必要があるかどうかは問題に言及されていませんので、ターゲットファイルのアドレスを一時的にコードに直接付けてもいいです。
    在这里插入图片描述
    初期化ページでは、まずこのファイルパスに対応するファイルオブジェクトを作成します。
    
    //    
    	private File targetFile;
    ...
    //        
    	targetFile = new File(TARGET_FILE);
    	if(targetFile.createNewFile()) {
    		System.out.println("     ,    ");
    	}else {
    		System.out.println("    ");
    	}
    
    ここでいくつかの問題に注意する必要があります。
    1.ターゲットファイルを作成するには、private static final String TARGET_FILE= "./temp.txt";方法ではなく、createNewFile()方法を使用する必要があります。ファイルではなくフォルダとして作成されます。
    2.createNewFile()方法はIOExceptionを投げ出します。処理を容易にするために、ここで直接選択して異常を構造方法と主方法から投げ出します。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ターゲットファイルの問題を処理して、プログラムを2回起動して、コンソールの出力を見ることができます。
    在这里插入图片描述
    在这里插入图片描述
    えっと、書類の処理が成功しました。
    次に、2つのボタンにクリックイベントを追加します。以下の処理では、IOストリームの選択に対して、文字ストリームを選択します。
    まず、ファイルを読むボタンです。イベントをクリックするロジックは大体次の通りです。
    1.ターゲットファイルを作成する入力文字ストリーム
    2.入力ストリームからファイルの内容を読み取り、結果を作成する
    3.入力ストリームを閉じる
    4.読み込んだ結果をテキスト表示エリアに表示する
    実装がコードになります:
    
    //          
    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();
    			
    			//          
    			int len;
    			
    			//                
    			while((len = reader.read(buffer)) != -1) {
    				result.append(buffer,0,len);
    			}
    			
    			//     
    			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();
    		}
    
    	}
    });
    
    ターゲットファイルにmkdir()を書き込み、プログラムを実行し、Hello World!!をクリックしてください。
    在这里插入图片描述
    ニック~
    はい、これからは最後の仕事が残っています。アーカイブを完成します。
    アーカイブボタンのクリックイベントは以下の通りです。
    1.ターゲットファイルの文字出力ストリームを開く
    2.現在のテキスト表示エリアの内容を取得する
    3.テキスト表示エリアの内容を出力ストリームでファイルに書き込む
    4.出力ストリームを閉じる
    5.テキスト表示エリアを空にする
    最後の一つは私が加えたものです。実はよく知らなくてもいいです。
    コードの実装は以下の通りです。
    
    //          
    saveButton.addActionListener(new ActionListener() {
    	
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		
    		try {
    			//         
    			FileWriter writer = new FileWriter(targetFile);
    		
    			//         
    			String result = textArea.getText();
    			
    			//    
    			writer.write(result);
    			
    			//     
    			writer.close();
    			
    			//         
    			textArea.setText("");
    			
    			System.out.println("    ");
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    	}
    });
    
    テキスト表示エリアにloadを入力し、Hello Java!!をクリックしてください。
    在这里插入图片描述
    なんですか?テキストボックスの中には何もないと言いましたか?はい、最後に内容をクリアしました。
    四、全部のコード
    はい、上の機能を全部実現しました。最後にコードをここにまとめます。
    (盗作を慎むよ)
    
    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";
    	
    	//    
    	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();
    		
    		//        
    		targetFile = new File(TARGET_FILE);
    		if(targetFile.createNewFile()) {
    			System.out.println("     ,    ");
    		}else {
    			System.out.println("    ");
    		}
    		
    		//    
    		textArea = new TextArea();
    		saveButton = new JButton("save");
    		loadButton = new JButton("load");
    		
    		//          
    		saveButton.addActionListener(new ActionListener() {
    			
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				
    				try {
    					//         
    					FileWriter writer = new FileWriter(targetFile);
    				
    					//         
    					String result = textArea.getText();
    					
    					//    
    					writer.write(result);
    					
    					//     
    					writer.close();
    					
    					//         
    					textArea.setText("");
    					
    					System.out.println("    ");
    				} catch (IOException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    			}
    		});
    		
    		//          
    		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();
    					
    					//          
    					int len;
    					
    					//                
    					while((len = reader.read(buffer)) != -1) {
    						result.append(buffer,0,len);
    					}
    					
    					//     
    					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();
    				}
    				
    				
    			}
    		});
    		
    		//      
    		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);
    	}
    }