Java中无论是将什么样的数据写入到文本文件中,都需要使用IO流去操作,我们需要使用java.io包中的类去实现,其中最重要的五个类是File、OutputStream、InputStream、Writer、Reader,我们使用OutputStream、InputStream实现字节的输入和输出操作,使用Writer、Reader去实现字符的输入和输出操作。这两组类均为抽象类,可以根据使用场景的不同使用不同的实现类。
工具/原料
IntelliJIDEA
方法/步骤
1、Java中我们使用流进行数据传输,就好像在数据源和目的之间建立了一条传输管道,我们可以想象一下就像水管一样。IO流根据处理数据的类型不同分为字符流和字节流,根据数据的流向不同可以分为输入流和输出流。IO流的分类可以参考下图,我们将在接下来使用这里面的类。
2、接下来我们创建一个TxtUtil工具类,来实圬杂钴怖现写入文本文件的方法。下面这个方法是将数据追加写入到文围泠惶底件文件的末尾,我们可以看到该方法有两个参数,List<String>就是我们要写入的数据,因此不管是什么格式的数据我们都需要转成List<String>写入,fileName是我们要写入的文件名,如果这个文件不存在的话,下面的方法中newFile(fileName)会帮我们创建。以下便是使用输出了将数据写入到文件的代码,注意流在使用后一定要关闭。/***数据追加写到文件末尾**@paramdataList*@paramfileName*@return*/publicstaticvoidappendData2File(List<String>dataList,StringfileName){OutputStreamWriterout=null;FileOutputStreamfos=null;try{Filefile=newFile(fileName);if(!file.getParentFile().isDirectory()){file.getParentFile().mkdirs();}if(!file.exists()){file.createNewFile();}//追加写入文件,且使用UTF-8格式fos=newFileOutputStream(fileName,true);out=newOutputStreamWriter(fos,"UTF-8");for(intdataIndex=0;dataIndex<dataList.size();dataIndex++){out.write(dataList.get(dataIndex));out.write("\r\n");}}catch(Exceptione){}finally{try{if(null!=out){out.flush();out.close();fos.close();}}catch(IOExceptione){}}}
3、我们在持续写入文本文件时也需要去判断文件的大小,如果文件过大的话,即便文件写入成功,打开也要等待很长时间,因此该方法还是很有必要的。/***根据java.nio.*的流获取文件大小*@paramfile*/publicstaticlonggetFileSize(Filefile){FileChannelfc=null;try{if(file.exists()&&file.isFile()){FileInputStreamfis=newFileInputStream(file);fc=fis.getChannel();returnfc.size();}}catch(Exceptione){e.printStackTrace();}finally{if(null!=fc){try{fc.close();}catch(IOExceptione){e.printStackTrace();}}}return0;}
4、工具类已经写完了,接下来便是如何将HashMap类型的数据写入到文本文件。我尺攵跋赈们创建一个Test类,在main方法中创建HashMap,并且放入一些测试数据,将HashMap中的数据转成工琼藻樘哒具类中需要的List<String>类型,然后调用工具类中的方法将数据写入文件,最后打印文件的大小。publicstaticvoidmain(String[]args){Map<String,Object>map=newHashMap<>();map.put("桃子",10);map.put("香蕉",8);map.put("西瓜",6);List<String>list=newArrayList<>();//遍历HashMap将数据转为List<String>for(Map.Entry<String,Object>entry:map.entrySet()){StringBuilders=newStringBuilder();s.append(entry.getKey()).append(entry.getValue()).append("元");list.add(s.toString());}//将数据写入到文本文件StringfileName="E:/test.txt";TxtUtil.appendData2File(list,fileName);longfileLength=TxtUtil.getFileSize(newFile(fileName));System.out.println(fileLength);}
5、运行上面的测试类,我们可以看到在E盘生成了test.txt文件,我们打开该文件可以看到数据已经成功写入了,同时控制台也打印输出了文件的大小,如下图所示。