1

ディレクトリ内のすべてのファイルの名前を変更しています。テキスト ファイルの場合はコンテンツを変更していますが、ファイルの名前は正しく変更されていないようですが、コンテンツが空白になっている/消えているのは私のコードです:

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();
        }
    }
}
4

2 に答える 2

0

あなたのコードにはいくつかの問題があります:

  1. あなたのrewrite機能は古い名前で実行されますFile。名前を変更した上で行う必要があります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. 通常のテキスト ファイルのようにdocxおよびpdfファイルを読み込もうとしています。これは機能しません。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();
    }
    
于 2014-09-08T15:48:48.763 に答える
0

ファイルをそれ自体の上に書き直すことはできません。新しいコンテンツを新しいファイルに書き込んでから、再度名前を変更する必要があります。

于 2014-09-08T15:33:07.960 に答える