I/O输入和输出
文件的输入和输出是java中很重要的内容,主要是通过数据流来进行,数据流通过获取文件对象,然后对文件进行输入和输出。
1、IO.File测试
public class FileTest { public static void main(String[] args) { new FileTest().createFile(); new FileTest().getMessage(); new FileTest().outputStream(); new FileTest().inputStream(); } public void createFile(){ //创建文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt"); //判断是否存在该文件名的文件 if (file.exists()) { //删除该文件名的文件 file.delete(); System.out.println("文件已经删除"); //如果不存在就直接创建文件 }else { try{ //创建文件 file.createNewFile(); System.out.println("文件已经创建"); }catch (IOException e) { e.printStackTrace(); } } } //获取某个文件的相关信息 public void getMessage(){ File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt"); if (file.exists()) { //获取文件名字 String name=file.getName(); //获取文件长度 long length=file.length(); //文件是否隐藏的 boolean hidden=file.isHidden(); //文件是否可读 boolean read=file.canRead(); //文件是否可写 boolean writer=file.canWrite(); //获取文件绝对路径 String absolutePath=file.getAbsolutePath(); //获取文件父路径 String parent=file.getParent(); //判断该路径文件是否是文件类型 boolean isfile=file.isFile(); //判断路径文件是否为目录 boolean isdirectory=file.isDirectory(); //获取文件最后一次修改时间 long lasttime=file.lastModified(); //转换一下时间格式 java.util.Date date=new java.util.Date(lasttime); System.out.println("文件名称是:"+name); System.out.println("文件长度是:"+length); System.out.println("该文件是隐藏文件吗?"+hidden); System.out.println("该文件是可读文件吗?"+read); System.out.println("该文件是可写文件吗?"+writer); System.out.println("文件的绝对路径是:"+absolutePath); System.out.println("文件的父路径是:"+parent); System.out.println("该文件是一个文件吗?"+isfile); System.out.println("该文件是一个目录吗?"+isdirectory); System.out.println("该文件最后修改时间为:"+date); }else { System.out.println("文件不存在"); } } //获取输出流 public void outputStream(){ //创建输出文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt"); try { //将文件对象加入到输出流中 FileOutputStream fileOutputStream=new FileOutputStream(file); //获取输出内容(以字符串数组存储 byte buy[]="星光不问赶路人,岁月不负有心人".getBytes(); //将字符数组中的内容输出到文件对象 fileOutputStream.write(buy); System.out.println("输出完成"); //关闭输出流 fileOutputStream.close(); } catch (Exception e) { System.out.println("文件异常"); } } //获取输入流 public void inputStream(){ //获取文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt"); try { //将文件对象加入到输入流中 FileInputStream fileInputStream=new FileInputStream(file); //创建字符数组(准备用来存储字符数据 byte[] bs=new byte[1024]; //获取读取流读取字符长度 int len=fileInputStream.read(bs); //输出字符 System.out.println("文件中的信息是:"+new String(bs,0,len)); //关闭输入流 fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } }
运行截图:
2、利用JFram来写入文件数据和获取文件数据
public class FileReaderAndFileWriterTest extends JFrame{ //控制文本域 private JScrollPane scrollPane; private static final long serialVersionUID=1L; //创建内容面板对象 private JPanel jContentPane=null; //创建文本域对象 private JTextArea jTextArea=null; //创建控制面板 private JPanel controlPane=null; //创建按钮对象 private JButton openButton=null; private JButton closeButton=null; //构造器 public FileReaderAndFileWriterTest(){ super(); //初始化面板 initialize(); } //设置写入文件按钮 private JButton getOpenButton(){ //判断按钮是否为null if (openButton==null) { //创建按钮对象 openButton=new JButton(); //设置按钮的提示信息 openButton.setText("写入文件"); openButton.addActionListener(new ActionListener() { //按钮的单击事件 @Override public void actionPerformed(ActionEvent e) { //创建文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt"); try{ //创建FileWriter对象,用于输出数据 FileWriter out=new FileWriter(file); //获取文本域中文件 String string=jTextArea.getText(); //将信息写入磁盘文件 out.write(string); //关闭输出流 out.close(); }catch (Exception e1) { e1.printStackTrace(); } } }); //调试异常 }else { System.out.println("不能输出数据"); } return openButton; } //设置读取文件按钮 private JButton getCloseButton(){ //判断按钮式是否为空 if (closeButton==null) { //创建按钮对象 closeButton=new JButton(); //设置提示信息 closeButton.setText("读取文件"); //按钮的单击事件 closeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //创建文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt"); try{ //创建输入文件流 FileReader fileReader=new FileReader(file); //创建一个char数组,用来存储读入的数据 char byt[] =new char[1024]; //读取数据然后返回将读取的数据 int len=fileReader.read(byt); //将数据写入到文本域中 jTextArea.setText(new String(byt, 0, len)); //关闭读入流 fileReader.close(); }catch (Exception e1) { e1.printStackTrace(); } } }); } else { System.out.println("不能读入数据"); } return closeButton; } //初始化容器 private void initialize(){ //设置模板大小 this.setSize(300,200); //将面板加入 this.setContentPane(getJContentPane()); //创建容器标题 this.setTitle("JFrame"); } //获取文本域 private JTextArea getJTextArea(){ if (jTextArea==null) { //创建一个文本域 jTextArea=new JTextArea(); } return jTextArea; } private JPanel getControlPanel(){ if (controlPane==null) { //设置控制模板的布局 FlowLayout flowLayout=new FlowLayout(); flowLayout.setVgap(1); //创建面板 controlPane=new JPanel(); controlPane.setLayout(flowLayout); controlPane.add(getOpenButton(),null); controlPane.add(getCloseButton(),null); } return controlPane; } private JPanel getJContentPane(){ if (jContentPane==null) { //创建一个新的模板 jContentPane=new JPanel(); //设置模板的布局格式 jContentPane.setLayout(new BorderLayout()); //将scrollPane模板设置在中间 jContentPane.add(getScrollPane(),BorderLayout.CENTER); //将控制模板放在南边 jContentPane.add(getControlPanel(),BorderLayout.SOUTH); } else { System.out.println("你的模板有问题"); } return jContentPane; } //主方法 public static void main(String[] args) { //创建对象 FileReaderAndFileWriterTest readerAndWriterTest=new FileReaderAndFileWriterTest(); readerAndWriterTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); readerAndWriterTest.setVisible(true); } //创建可变的文本域 protected JScrollPane getScrollPane(){ if (scrollPane==null) { scrollPane=new JScrollPane(); scrollPane.setViewportView(getJTextArea()); } return scrollPane; } }
运行截图:
注意:一次运行只能读取或者写入一次,后面都是一样的文件内容了,你可以开运行两次,获取两个框,一个进行写入,另一个进行读取就行。
3、利用缓冲区来读写文件
public class BufferedReaderAndBufferedWriter { public static void main(String[] args) { //设置内容数组 String[] contents={"须知少年拿云志,曾许人间第一流。","总有人间一两风,填我十万八千梦。","心若有所向往,何惧道阻且长。"}; //创建文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\BufferedReaderAndBufferedWriter.txt"); try{ //创建FileWriter对象 FileWriter fileWriter=new FileWriter(file); //创建BufferWriter对象,并且将FileWriter对象加入BufferWriter BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); //遍历数组 for(int i=0;i<contents.length;i++){ //将内容输出 bufferedWriter.write(contents[i]); //将数组中单个元素的以单行的形式写入文件 bufferedWriter.newLine(); } //关闭输出流和输入流的时候,先开后关,后开先关 //关闭BufferWriter对象 bufferedWriter.close(); //关闭FileWriter对象 fileWriter.close(); }catch (Exception e) { e.printStackTrace(); } try{ //创建FileReader对象 FileReader fileReader=new FileReader(file); //创建BufferedReader对象并且将FielReader对象加入到BufferedReader对象中 BufferedReader bufferedReader=new BufferedReader(fileReader); //创建一个空字符串 String string=null; //创建i并且赋值为0 int i=0; //while循环按行读取文件中的值 while((string=bufferedReader.readLine())!=null){ i++; //在控制台输出读取的数据 System.out.println("第"+i+"行:"+string); } //规则同上 //关闭BufferedReader对象 bufferedReader.close(); //关闭FileReader对象 fileReader.close(); }catch (Exception e) { e.printStackTrace(); } } }
运行截图:
4、利用数据输入流和输出流进行文件读取和内容输出
public class DataInputStreamAndDataOutputStream { public static void main(String[] args) { try{ //创建文件对象 File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\DataInputStreamAndDataOutputStream.txt"); //创建FileOutputStream对象,并且将文件对象加入 FileOutputStream fileOutputStream=new FileOutputStream(file); //创建DataOutputStream对象,并且将FileOutputStream加入DataOutputStream对象 DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream); //将数据按UTF格式写入文件中 dataOutputStream.writeUTF("使用writeUTF方法写入数据"); //将数据按Char格式写入文件中 dataOutputStream.writeChars("使用writeChars方法写入数据"); //将数据按Byte格式写入文件中 dataOutputStream.writeBytes("使用writesBytes方法写入数据"); //关闭输出流 dataOutputStream.close(); //创建文件输出流对象,并且将文件对象加入到文件输出流对象中 FileInputStream fileInputStream=new FileInputStream(file); //创建DataInputStream对象,并且将文件输出流对象加入 DataInputStream dataInputStream=new DataInputStream(fileInputStream); //控制台输出按照UTF格式读取的数据 System.out.println(dataInputStream.readUTF()); //控制台输出按照Char格式读取的数据 System.out.println(dataInputStream.readChar()); //控制台输出按照Byte格式读取的数据 System.out.println(dataInputStream.readByte()); //关闭DataInputStream输入流 dataInputStream.close(); //关闭文件输入流 fileInputStream.close(); }catch (Exception e) { e.printStackTrace(); } } }
运行截图:
注意:大家发现输出不对劲是正常的,因为用非UTF-8格式存储和读取数据是会乱码的·。