Java IO Files yan dosya adları değiştirilemiyor

Zodoath

Decapat
Katılım
2 Ekim 2021
Mesajlar
36
Daha fazla  
Cinsiyet
Erkek
Merhabalar. Benden şöyle bir şey isteniyor: Bir tane dosya seçiniz. Bu dosyanın içindeki tüm dosyaları(files) ve yan dosyaları(subfolders) upper case(tüm harfleri büyük olacak şekilde) haline getiriniz ve eğer "İ,Ş,Ü,Ğ,Ö" gibi harfler varsa bunları "I,S,U,G,O" harflerine dönüştürünüz. Ben bir kısmına kadar gelebildim ama yan dosyaların içindeki dosyaların veya yan dosyaların adını değiştiremiyorum bir türlü. Ne yapmam lazım? Kod:

Java:
import java.util.*;

import java.io.*;

import java.nio.file.Files;

public class project4 {



    public static void main(String[] args) {

        Scanner scan= new Scanner(System.in);

        System.out.print("Please enter a file name:");

        String fileName=scan.nextLine();

   

   

        File f= new File(fileName);

        scan.close();

       ArrayList<File> files= getSubFoldersandFiles(f);

       files.remove(f);

        System.out.println(f.getName()+" "+getFolderSize(f));

        for(File folder: files) {

       

                System.out.println(folder.getName()+" "

        +getFolderSize(folder));

           

                f.renameTo(new File(folder.getAbsolutePath(),clearTurkishChars(folder.getName())));

        }

       

   

   

        }



    public static String clearTurkishChars(String str) {

   

          String ret =str.toUpperCase(Locale.ENGLISH);

            char[] turkishChars = new char[] {0x131, 0x130, 0xFC, 0xDC, 0xF6, 0xD6, 0x15F, 0x15E, 0xE7, 0xC7, 0x11F, 0x11E};

            char[] englishChars = new char[] {'i', 'I', 'u', 'U', 'o', 'O', 's', 'S', 'c', 'C', 'g', 'G'};

            for (int i = 0; i < turkishChars.length; i++) {

                ret = ret.replaceAll(new String(new char[]{turkishChars}), new String(new char[]{englishChars}));

            }

            return ret;

           

        }

    public static long getFolderSize(File folder)

    {

        long length = 0;

        if(!folder.isDirectory()) {

            length+=folder.length();

        }

     

        else {

        File[] files = folder.listFiles();

 

        int count = files.length;

 

        // loop for traversing the directory

        for (int i = 0; i < count; i++) {

            if (files.isFile()) {

                length += files.length();

            }

            else {

                length += getFolderSize(files);

            }

        }

        }

        return length;

    }

   

   

    static ArrayList<File> getSubFoldersandFiles(File f) {

        Queue<File> q = new LinkedList<>();

        q.add(f);

        ArrayList<File> res = new ArrayList<>();

       

        while(!q.isEmpty()) {

            File cur = q.remove();

            if(cur.isDirectory()) {

                res.add(cur);

                for(File ch: cur.listFiles()) {

                    q.add(ch);

                }

            }

            else

                res.add(cur);

           

           

        }

        System.out.println("");

        return res;

    }

   

}
 
Son düzenleyen: Moderatör:
Uzun bir süre önce buna benzer basit bir uygulama yapmıştım. İncelemen için burada paylaşıyorum.
Java:
import java.io.File;

public class Main {
    public static void main(String[] args) throws Exception {
        File aDirectory = new File(/* Main folder */);
        renameDirectories(aDirectory);
    }

    private static void renameDirectories(File currentPath) throws Exception {
        for (File aFile : currentPath.listFiles()) {
            if (aFile.isDirectory()) {
                renameDirectories(aFile);
                if (/* Condition */)
                    aFile.renameTo(new File(aFile.getParent(), /* New name */));
            }
        }
    }
}

Ayrıca satırlar arasında boşluk bırakmak yerine editörünün Line Spacing özelliğini kullanmalısın :)
 
Uzun bir süre önce buna benzer basit bir uygulama yapmıştım. İncelemen için burada paylaşıyorum.
Java:
import java.io.File;

public class Main {
    public static void main(String[] args) throws Exception {
        File aDirectory = new File(/* Main folder */);
        renameDirectories(aDirectory);
    }

    private static void renameDirectories(File currentPath) throws Exception {
        for (File aFile : currentPath.listFiles()) {
            if (aFile.isDirectory()) {
                renameDirectories(aFile);
                if (/* Condition */)
                    aFile.renameTo(new File(aFile.getParent(), /* New name */));
            }
        }
    }
}

Ayrıca satırlar arasında boşluk bırakmak yerine editörünün Line Spacing özelliğini kullanmalısın :)
Çok teşekkür ederim. İlk başta düz text olarak yüklemiştim kodu daha sonra kod haline getirdim buradan ondan dolayı öyle olmuş sanırım. Tekrardan çok teşekkür ederim.
 
Uzun bir süre önce buna benzer basit bir uygulama yapmıştım. İncelemen için burada paylaşıyorum.
Java:
import java.io.File;

public class Main {
 public static void main(String[] args) throws Exception {
 File aDirectory = new File(/* Main folder */);
 renameDirectories(aDirectory);
 }

 private static void renameDirectories(File currentPath) throws Exception {
 for (File aFile : currentPath.listFiles()) {
 if (aFile.isDirectory()) {
 renameDirectories(aFile);
 if (/* Condition */)
 aFile.renameTo(new File(aFile.getParent(), /* New name */));
 }
 }
 }
}

Ayrıca satırlar arasında boşluk bırakmak yerine editörünün Line Spacing özelliğini kullanmalısın :)

Buradaki kodda if statementının conditionı ne olmalı ki renameTo() methodu çalışsın ? Cevabın için şimdiden teşekkür ederim.
 

Yeni konular

Geri
Yukarı