前天写了一篇技术博客把之前自己写的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