gpt4 book ai didi

Java I/O 写入、mixcase 和 getExtension 问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:34:46 25 4
gpt4 key购买 nike

我正在更改目录中所有文件的名称,如果它是文本文件,我正在更改内容,但它似乎不起作用,文件名已正确更改,但内容为空白/消失,这是我的代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.commons.io.FilenameUtils;

public class FileOps {
public static File folder = new File(
"C:\\Users\\N\\Desktop\\New folder\\RenamingFiles\\src\\renaming\\Files");
public static File[] listOfFiles = folder.listFiles();

public static void main(String[] argv) throws IOException {
toUpperCase();
}

public static void toUpperCase() throws FileNotFoundException {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String newname = mixCase(listOfFiles[i].getName());

if (listOfFiles[i].renameTo(new File(folder, newname))) {
String extension = FilenameUtils
.getExtension(listOfFiles[i].getName());
if (extension.equals("txt") || extension.equals("pdf")
|| extension.equals("docx")
|| extension.equals("log")) {
rewrite(listOfFiles[i]);

System.out.println("Done");
}

}
} else {
System.out.println("Nope");
}
}
}

public static String mixCase(String in) {
StringBuilder sb = new StringBuilder();
if (in != null) {
char[] arr = in.toCharArray();
if (arr.length > 0) {
char f = arr[0];
boolean first = Character.isUpperCase(f);
for (int i = 0; i < arr.length; i++) {
sb.append((first) ? Character.toLowerCase(arr[i])
: Character.toUpperCase(arr[i]));
first = !first;
}
}
}
return sb.toString();
}

public static void rewrite(File file) throws FileNotFoundException {
FileReader reader = new FileReader(file.getAbsolutePath());
BufferedReader inFile = new BufferedReader(reader);

try {
FileWriter fwriter = new FileWriter(file.getAbsolutePath());
BufferedWriter outw = new BufferedWriter(fwriter);
while (inFile.readLine() != null) {
String line = mixCase(inFile.readLine());
outw.write(line);
}
inFile.close();
outw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

最佳答案

您的代码存在几个问题:

  1. 您的rewrite函数是在旧名称File上执行的。应该在重命名的文件上完成:

        String newname = mixCase(listOfFiles[i].getName());
    File renamedFile = new File(folder, newname);
    if (listOfFiles[i].renameTo(renamedFile )) {
    String extension = FilenameUtils
    .getExtension(listOfFiles[i].getName());
    if (extension.equals("txt") || extension.equals("pdf")
    || extension.equals("docx")
    || extension.equals("log")) {
    rewrite(renamedFile);

    System.out.println("Done");
    }

    }
  2. 您正在尝试像常规文本文件一样阅读docxpdf文件。这是行不通的。您将必须使用外部库,例如 POIpdf Box

  3. 您的rewrite函数不安全。您必须不确定是否关闭资源:

     FileReader reader = null;
    BufferedReader inFile = null;

    try {
    reader = new FileReader(file.getAbsolutePath());
    inFile = new BufferedReader(reader);
    FileWriter fwriter = new FileWriter(file.getAbsolutePath());
    BufferedWriter outw = new BufferedWriter(fwriter);

    while (inFile.readLine() != null) {
    String line = mixCase(inFile.readLine());
    outw.write(line);
    }

    } catch (IOException e) {
    e.printStackTrace();
    }finally
    {
    if(infile != null)
    inFile.close();

    if(reader != null)
    reader .close();
    }

关于Java I/O 写入、mixcase 和 getExtension 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25727708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com