动态创建多个文件并在每个文件中存储不同的消息

时间:2012-02-29 09:08:48

标签: java

public static void record(Message  message)//Message is a class 
    {
    try
      {
        BufferedOutputStream buf=new BufferedOutputStream(new      FileOutputStream("E:/kruthika/proj/a.bin"));
        byte[] b =serializer.serialize(message);        
        buf.write(b);
        buf.flush();


      }
    catch(Exception e){System.out.print(e);}
  }

这是一个小代码,它序列化我的消息对象(该对象包含一些文本消息)并将其写入二进制文件。如果对象只携带一个单词用于文本但是如果发送了很多单词,则这很有效,显然它会在二进制文件中被覆盖。那么如何更改代码片段以动态创建多个文件,然后将不同的消息存储在不同的文件中?

4 个答案:

答案 0 :(得分:1)

将文件(名称)作为方法参数传递

 public static void record(Message  message, File binFile)

或尝试从消息对象计算文件名 - 也许它包含类名?

 File binFile = new File("E:/kruthika/proj", createFileName(message));

后一个示例将数据存储在一个文件中,其文件名为 relative ,路径为E:/kruthika/proj

答案 1 :(得分:1)

您可以将fileName-parameter传递给函数,也可以使用静态计数器或当前日期时间作为文件名: 显示的是带有计数器的解决方案

private static int count = 0;

public static void record(Message  message)//Message is a class 
    {
    try
      {
        BufferedOutputStream buf=new BufferedOutputStream(
          new FileOutputStream("E:/kruthika/proj/" + count + ".bin")
        );
        byte[] b =serializer.serialize(message);        
        buf.write(b);
        buf.flush();

        count++;

      }
    catch(Exception e){System.out.print(e);}
  }

答案 2 :(得分:1)

String filename = "a_" + System.nanotime() + ".bin";
BufferedOutputStream buf=new BufferedOutputStream(new           FileOutputStream("E:/kruthika/proj/" + filename));
    byte[] b =serializer.serialize(message);        
    buf.write(b);
    buf.flush();
    buf.close();

是一种快速而肮脏的方法。

答案 3 :(得分:0)

嗯,你把文件名硬编码为“E:/kruthika/proj/a.bin”,所以显然所有内容都会被写入同一个文件。如果您需要不同的文件,请不要对名称进行硬编码,例如:通过使其成为记录方法的参数。