1

我正在尝试从一个文件夹中读取文件,然后使用原始文件名和递增整数存储在另一个文件夹中,但我没有成功:

File f = new File(C:/FILES);
String listfiles[] = f.list();
for (int i = 0; i < listfiles.length; i++) {
    int count = 0;
    FileInputStream fstemp = new FileInputStream("C:/FILES/" + listfiles[i]);
    FileOutputStream fos = new FileOutputStream("C:/TEMPFILES/" +count + "_"+ listfiles[i]);
    BufferedReader br = new BufferedReader(new InputStreamReader(fstemp));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
    String strLine;
    ..................
    count++;
}

我所有的文件都被移动到带有 0 整数的临时文件夹中。我需要 1、2、3、4,......我错过了什么?

4

2 回答 2

4

您的变量count设置为0每次新循环迭代开始时。

只需将其声明放在上一行:

int count = 0; //
for (int i = 0; i < listfiles.length; i++) {
于 2013-06-07T14:29:05.697 回答
3

您可能不想count在循环的每一轮都重新初始化以0...

你基本上有这个:

for (<conditions>) {
  int count = 0; // whoops, set to 0 for every iteration!!

   // do stuff

   count++;
}

你要这个:

int count = 0;
for (<conditions>) {

   // do stuff

   count++;
}

额外说明:

  • 我希望你在 finally 块中我们看不到的地方释放这些文件句柄。
  • 你可以使用ifor count
  • 你给我们的例子不完整,不起作用。请给我们一个SSCCE。例如,您File f = new File(C:/FILES);的实际代码明显不同。
  • 如果你想复制文件并且这不是家庭作业,我可以让你对 Apache Commons 的FileUtils课程或 Guava 的课程感兴趣Files吗?
  • 您可能想检查文件是否不存在,并且可能使用临时文件夹和临时文件名生成器。

建议重写

对于 Java 5 和 6。Java 7 使用 try-with-resources 会更好。

int i = 0;

for (final String f : new File("C:/FILES").list()) {
  final FileInputStream fstemp = null;
  FileOutputStream fos = null;

  try {
    fstemp = new FileInputStream(f);
    fos = new FileOutputStream(new File("C:/TEMPFILES/" + i + "_"+ f.getName()));

    // go on with your manual copy code... or use Guava's Files.copy(File, File):
    //   copy(f, new File("C:/TEMPFILES/" + i + "_"+ f.getName()))

    // more stuff here
  } catch (IOException ioe) {
     // catch here if you feel like, and do something about it
  } finally {
     // close streams if not null
  }
  count++;
}
于 2013-06-07T14:28:40.393 回答