黑马程序员技术交流社区

标题: java中点击按钮读取和写入文件实现登录和注册 [打印本页]

作者: 专注的一批    时间: 2020-6-24 11:21
标题: java中点击按钮读取和写入文件实现登录和注册
代码功能:

1、点击JFrame窗口中的登录按钮 读取文件中数据实现登录

2、点击JFrame窗体中的注册按钮 写入文件中数据实现登录

注意:

1、只能在文件中插入一组数据,通过这一组数据来实现登录

2、注册时插入的数据不能为空

3、如果注册失败,点击登录按钮会出错(因为注册失败后,文件中数据为空,无法读取数据)

4、只在一个文件 Start.java 中实现

5、使用IO流 + 匿名内部类监听 + 窗体 实现

代码如下:

package com.ludx.job;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import javax.imageio.ImageIO;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

//登录注册的页面

public class Start implements ActionListener{

public static void main(String[] args) throws IOException{

Start st = new Start();

st.init();

System.out.println("---------------------注册失败时不可登录--------------------"); //注册失败时文件为空,无数据

}

//用户名和密码为全局变量

JTextField text1 = new JTextField(10);

JPasswordField text2 = new JPasswordField(10);

File file1 = new File("D:\\cm\\user.txt"); //创建File文件

JLabel label = new JLabel(); //创建标签

//初始化窗体

public void init() throws IOException{

//创建窗体 面板 标签 按钮 文本输入框 密码输入框

JFrame f = new JFrame();

JPanel p = new JPanel();

JLabel la1 = new JLabel("用户名:");

JLabel la2 = new JLabel("密码:");

JButton b1 = new JButton("登录");

JButton b2 = new JButton("注册");

p.add(la1);

p.add(text1);

p.add(la2);

p.add(text2);

p.add(b1);

p.add(b2);

p.add(label);

f.add(p);

f.setVisible(true); //可见

f.setTitle("登录注册"); //标题

f.setSize(500,300); //大小

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭后台

f.setResizable(false); //不可改变

f.setLocation(430, 150); //窗体位置

f.setIconImage(ImageIO.read(new File("images/hdjs.jpg"))); //窗体图标

//注册----------写入文件用户名和密码 (匿名内部类)

b2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

try {

String s3 = text1.getText(); //获取文本输入框的用户名

String s4 = text2.getText(); //获取文本输入框的密码

//创建字节输出流FileOutputStream

FileOutputStream fos = new FileOutputStream(file1);

//创建字符输出流OutputStreamWriter

OutputStreamWriter osw = new OutputStreamWriter(fos);

//创建字符缓冲输出流BufferedWriterd

BufferedWriter bw = new BufferedWriter(osw);

if(s3 == null || s3.length() <=0||s4 ==null ||s4.length()<=0){ //判空

label.setText("注册失败");

label.setForeground(Color.black);

System.out.println("注册失败:输入不能为空!");

}else{

bw.write(s3); //把输入的用户名写到文件中

bw.newLine();

bw.write(s4); //把输入的密码写到文件中

bw.newLine();

label.setText("注册成功");

label.setForeground(Color.black);

System.out.println("注册成功的用户名为:"+s3);

System.out.println("注册成功的密码为:"+s4);

bw.close(); //关闭流

}

} catch (Exception e1) {

e1.printStackTrace();

label.setText("注册失败");

label.setForeground(Color.black);

System.out.println("注册失败:数据未插入到文件中!");

}

}

});

//登录 ----------读取文件中用户名密码 绑定监听事件
外汇经纪商动态http://www.kaifx.cn/lists/news/

b1.addActionListener(this);

}

//绑定登录按钮(读取文件中已有的用户名和密码)

//实现ActionListener接口后,强制要求重写的方法

public void actionPerformed(ActionEvent e) {

try{

String s1 = text1.getText(); //获取文本输入框的用户名

String s2 = text2.getText(); //获取文本输入框的密码

//创建字节输入流FileInputStream

FileInputStream fis = new FileInputStream(file1);

//创建字符输入流InputStreamReader

InputStreamReader isr = new InputStreamReader(fis);

//创建字符缓冲输入流BufferedReader

BufferedReader br = new BufferedReader(isr);

String m1 = br.readLine(); //读取文件中用户名 ; 不行,要定义为全局变量

String m2 = br.readLine(); //读取文件中密码

System.out.println("文件中的用户名为:"+m1);

System.out.println("文件中的密码为:"+m2);

if(m1.equals(s1) && m2.equals(s2)){

label.setText("登录成功");

label.setForeground(Color.black);

System.out.println("登录成功的用户名为:"+s1);

System.out.println("登录成功的密码为:"+s2);

}else{

label.setText("登录失败");

label.setForeground(Color.black);

System.out.println("登录失败:输入的用户名或密码不正确!");

}

//关闭流

br.close();

}catch (Exception e1) {

e1.printStackTrace();

}

}

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2