我想要做的是创建大量随机文件,但我只是完全迷失了。下面的代码不起作用,我想知道为什么它不起作用,我该怎么做才能解决它。
import java.io.*;
import java.util.*;
public class main {
public static void main(String arg[]){
Random rn = new Random();
int randn = 1+rn.nextInt(999999990);
String I_S = Integer.toString(randn);
Formatter file;
try{
for(int i = 0; i < 9999999; i++){
file = new Formatter("%s.txt", I_S);
}
}
catch(Exception ex){
System.err.println("Error");
}
}
}
答案 0 :(得分:2)
通过生成随机数,您最终可能会多次创建/覆盖同一文件。要拥有绝对独特的设置,请执行以下操作:
final int MAX = 9999999;
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < MAX; i++) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i < MAX; i++) {
// create files here
}
答案 1 :(得分:1)
如何创建多个文件,为每个文件生成一个随机名称。
您可能想查看File.createTempFile
。
查看您的代码,您可能需要类似
的内容Random rn = new Random();
String file;
for (int i = 0; i < 100; i++)
file = String.format("%i.txt", 1+rn.nextInt(999999990));
答案 2 :(得分:1)
你可能想要写一些更像这样的东西:
void Write()
{
try {
for(int i = 0; i < MAX_FILES; i++) {
FileWriter outFile = new FileWriter("C:\File" + i.toString() + ".txt");
PrintWriter out = new PrintWriter(outFile);
// Write text to file
out.println("This is line 1");
out.println("This is line 2");
out.print("This is line3 part 1, ");
out.println("this is line 3 part 2");
out.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
// obviously this requires a import java.io.*; at the top of the class
来源:http://www.abbeyworkshop.com/howto/java/writeText/index.html
答案 3 :(得分:1)
我不确定您希望此代码能够实现什么目标,但现在它实际上无效。
您每次都要循环许多次,多次创建Formatter
的实例。这不是文件;相反,它是一个知道如何替换字符串中的标记以创建其他字符串的类。
我认为你对你所调用的构造函数的描述以及整个类的目的感到困惑。构造函数将第一个参数作为用于输出的文件的名称 - 在您的情况下,它始终为%s.txt
。第二个参数是用于将String编码为文件的受支持字符集的名称。
此代码将始终失败,因为:
I_S
变量,例如“56437890”不是有效编码(而“UTF-8”将是)。因此,构造函数可能会在尝试编制编码方案时抛出异常。%s.txt
),所以你不会得到所需的多文件行为。I_S
) - 它被设置为一次,然后永远保持相同的值。所以甚至如果上述所有问题都不是问题,你仍然会反复创建相同的(单个)随机命名文件。正如我在评论中指出的那样,当 失败时,你正在抓住并吞下异常,因此你绝对无法知道 出错了什么。< / p>
从根本上说,我认为你对Formatter类的目的感到困惑,因为我不知道你想要实现什么(文件应该是空的吗?是否有特定的文本?)我无法建议绝对有效的东西。但是,如果您只想创建空文件,请在循环中尝试类似的内容:
String filename = "%s.txt".format(I_S);
File file = new File(filename);
file.createNewFile();
// Add some logic to update the random variable here!
最后一点,adarshr's answer完全正确,你有重复随机数的重要机会,所以你不会得到与你期望的完全一样多的文件。答案继续描述一种避免这种情况的好方法,值得关注。