日期:2014-05-20  浏览次数:20876 次

createTempFile名字问题
很简单的一个复制文本的程序,每次生成的文件总有几个数字后缀,请问这个后缀是怎么出来的?createTempFile()方法随机产生的吗?值大小可以进行控制吗?谢谢
Java code

    public static void main(String[] args) throws IOException{
        File f = new File("F:/", "case.txt");
        FileInputStream fis = new FileInputStream(f);
        byte[] b = new byte[(int)f.length()];
        System.out.println(f.length());
        fis.read(b);
        File fi = f.createTempFile("CopyNameClass", ".java", new File("f:/"));
        FileOutputStream fou = new FileOutputStream(fi);
        fou.write(b);
        fou.close();
        fis.close();
        
    }


运行了三次的文件名:
CopyNameClass42847.java
CopyNameClass29564.java
CopyNameClass58792.java

------解决方案--------------------
Java code

//java.io.File
 private static File generateFile(String prefix, String suffix, File dir)
    throws IOException
    {
    if (counter == -1) {
        counter = new Random().nextInt() & 0xffff;
    }
    counter++;
    return new File(dir, prefix + Integer.toString(counter) + suffix);
    }

------解决方案--------------------
这是因为你调用的File.createTempFile()这个API,这个本来就是生成临时文件的,生成之后最后一般要删除,所以生成文件名称JVM有个标记

如果你不想有这个,就不应该调用上面的API,改成下面的
Java code


import java.io.*;

public class FileWriterDemo {
    public static void main(String[] args) throws IOException{
           File f = new File("F:/", "case.txt");
           FileInputStream fis = new FileInputStream(f);
           byte[] b = new byte[(int)f.length()];
           System.out.println(f.length());
           fis.read(b);
//           File fi = f.createTempFile("CopyNameClass", ".java", new File("f:/"));
           File fi = new File("F:/CopyNameClass.txt");
           FileOutputStream fou = new FileOutputStream(fi);
           fou.write(b);
           fou.close();
           fis.close();

       }
    
}