前天写了一篇技术博客把之前自己写的Java I/O读写文件的代码上传了,但后来想想并不妥。东西是能够用了,但是并不是真正意义上的产品。所以今天给前天的不足加上了一些代码,把文件读写真正做成一个产品,一个傻瓜式的谁都能用的产品。
在这个文件读写的产品上我加上了UI(用户界面):
虽然界面丑了点,但也算是一个入门的产品了。下面上代码:
首先是UI:
package com.czj_IO;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class JavaIOUI extends JFrame {
public static void main(String[] args) {
JavaIOUI jui = new JavaIOUI();
jui.init();
}
/**
* 初始化界面的方法
*/
private void init() {
this.setTitle("文件读写");
this.setSize(500, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setLayout(new FlowLayout());
addBackground();
JLabel j1 = new JLabel(" 文件名 : ");
JTextArea jp1 = new JTextArea(2, 30);
jp1.setText("这是文件读写实例.txt");
JLabel j2 = new JLabel("文件绝对路径:");
JTextArea jp2 = new JTextArea(2, 30);
jp2.setText("E://");
JLabel j3 = new JLabel(" 内容 : ");
JTextArea jp3 = new JTextArea(5, 30);
jp3.setText("这是文件读写实例的文件内容。");
this.add(j1);
this.add(jp1);
this.add(j2);
this.add(jp2);
this.add(j3);
this.add(jp3);
JButton jb1 = new JButton("写入文件");
jb1.setBorderPainted(false);
jb1.setFocusable(false);
this.add(jb1);
JButton jb2 = new JButton("读取文件");
jb2.setBorderPainted(false);
jb2.setFocusable(false);
this.add(jb2);
JLabel j4 = new JLabel("(必须已有该文件)");
this.add(j4);
JLabel j5 = new JLabel();
this.add(j5);
//给按钮添加监听器
IOListener il = new IOListener(j5,jp1,jp2,jp3,jb1,jb2);
jb1.addActionListener(il);
jb2.addActionListener(il);
this.setVisible(true);
}
/**
* 添加背景的方法
*/
private void addBackground(){
ImageIcon image=new ImageIcon(this.getClass().getResource("背景1.jpg"));
JLabel jlaImage=new JLabel(image);
jlaImage.setBounds(0, -35, image.getIconWidth(), image.getIconHeight());
this.getLayeredPane().add(jlaImage,new Integer(Integer.MIN_VALUE));
JPanel contentpane=(JPanel)this.getContentPane();
contentpane.setOpaque(false);
}
}
接下来是监听器:
package com.czj_IO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class IOListener implements ActionListener{
private JTextArea jp1,jp2,jp3;
private JButton jb1,jb2;
private JLabel j5;
public IOListener(JLabel j5, JTextArea jp1,JTextArea jp2,JTextArea jp3, JButton jb1, JButton jb2){
this.jp1 = jp1;
this.jp2 = jp2;
this.jp3 = jp3;
this.jb1 = jb1;
this.jb2 = jb2;
this.j5 = j5;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals(jb1.getText())){
TestIO ti = new TestIO();
try {
ti.writeFile(jp3.getText(),jp2.getText()+jp1.getText());
j5.setText("文件成功写入!");
} catch (Exception e1) {
e1.printStackTrace();
}
// System.out.println(jp3.getText());
// System.out.println(jp2.getText()+jp1.getText());
}else if(e.getActionCommand().equals(jb2.getText())){
TestIO ti = new TestIO();
ti.readFile(jp2.getText()+jp1.getText());
j5.setText("文件成功读出!已在控制台输出!");
}
}
}
再接下来就是上篇博客里已经有的主代码了:
package com.czj_IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class TestIO {
/**
* 读文件的方法
* @param fName文件绝对路径
*/
public void readFile(String fName){
try {
FileInputStream fis = new FileInputStream(fName);
int n=fis.read();//读取下一个字节
//循环读写
while(n!=-1){
System.out.println("读到的字节是"+n);
n = fis.read();
}
fis.close();//关闭输入流
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 写文件的方法
* @param msg写入的内容
* @param s文件绝对路径
* @throws Exception抛出异常
*/
public void writeFile(String msg,String s) throws Exception{
try {
FileOutputStream fos = new FileOutputStream(s,false);
byte[] b = msg.getBytes();//得到组成字符串的字节
fos.write(b);
fos.close();//关闭输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestIO tjm = new TestIO();
tjm.readFile("E://类与对象总结.txt");
try {//此语句运行两次必须改写入文件的文件名或删除上次写入的文件,否则报错(已有该文件)
tjm.writeFile("hello! 你好!~~~~", "E://写入的文件1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
}
有些时候别人并不在意你写了多少代码,只在意你通过代码实现了什么功能。而要提现你所实现的东西就必须把这个东西做成可视可用的产品。
梣梓cenzi
2015-0506