30/09/2018, 19:11

Lỗi lệnh xóa file,thư mục trong java

em viết một đoạn code quản lí file trong ổ cứng dùng lệnh. khi nhập lệnh xóa file,folder thì bị ném ra lỗi, mà em chưa biết sai chỗ nào, ae giúp em với. thank ae!

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import static java.lang.Thread.sleep;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Scanner;

/**
 *
 * @author Minh Ngoc
 */
public class File_demo {
    public static void main(String[] args) throws IOException  {
        try{
        Scanner in= new Scanner(System.in);
        System.out.println("Nhập vào đường dẫn cần quản lí:");
        System.out.println("admin:> ");
        String s1=in.nextLine();
        System.out.println("admin:> "+ s1+">");
        File file= new File(s1);
   //     inner;
        String s= in.nextLine();
        System.out.println("admin:> " +s1+">");     
            switch(s){
                case "showdir":
                    File[] listFile=file.listFiles();
                    for(int i=0;i<=listFile.length;i++){
                        if(listFile[i].isDirectory()||listFile[i].isFile()){
                            System.out.println(i+"."+listFile[i].getName());
                        }
                    }
                 
                    //System.out.println();
                
                case "makefile":
                    System.out.println(" Nhập vào tên file:");
                    String s3= in.nextLine();
                    File fileNew=new File(s1,s3);
                    fileNew.createNewFile();
                    FileWriter fw= new FileWriter(fileNew);
                    BufferedWriter bw = new BufferedWriter(fw);
                    
                    System.out.println(" Nhập vào dữ liệu:");
                    String str= in.nextLine();
                    bw.write(str);
                    bw.close();
                    fw.close();
                    System.out.println("
 make file succesful!!!");
                    System.out.println("Location: " + s1 +s3);break;
                case"makedir":
                    System.out.println("Nhập tên thư mục cần tạo:");
                    String dirNew=in.nextLine();
                    String s4= s1+dirNew;
                    File dir= new File(s4);
                    dir.mkdir();
                    System.out.println("Tạo thư mục thành công!!!!");
                    ;break;
                case "delete":
                    
                    File fd= new File(s1);
                    File[] listfd= fd.listFiles();
                    for(int j=0;j<=listfd.length;j++){
                        if(listfd[j].isDirectory()||listfd[j].isFile()){
                            
                            System.out.println(j + "."+listfd[j].getName());
                        }
                    }
                    System.out.println("Nhập vào số thứ tự của file hoặc thư mục cần xóa:");
                    int c=in.nextInt();
                    listfd[c].delete();
                    System.out.println("Xóa thành công!!!");break;
                case"exit":return;
                default:
                    System.out.println("input error!!!");break;
            }
        }
        catch(Exception error){
            System.out.println("Error:"+error); 
        }
}
}

Đoạn code lỗi:

 System.out.println("Nhập vào số thứ tự của file hoặc thư mục cần xóa:");
                    int c=in.nextInt();
                    listfd[c].delete();
                    System.out.println("Xóa thành công!!!");break;

Vu Duy viết 21:20 ngày 30/09/2018

Lỗi này là do bạn truy suất phần tử ngoài chuỗi rồi (listfd size 20 mà c thì là 20 nên lỗi (max index là 19)). Bạn phải kiểm tra biến c trước khi truy cập các phần tử trong chuỗi nhé.

Leng Keng viết 21:18 ngày 30/09/2018

mình chưa hiểu lắm, biến c là mình nhập từ bàn phím mà bạn nên mình có thể cho nhỏ hơn 20!
à cho mình hỏi, đoạn code này sẽ đưa các file, thư mục có trong thư mục đó vào trong một chuỗi đúng không:
File[] listfd= fd.listFiles();

Vu Duy viết 21:14 ngày 30/09/2018

Đúng rồi bạn, trong cái lỗi của bạn thì cái listfd có 20 file ở trong đó (index từ 0…19) nhưng bạn nhập c = 20 nên nó bị lỗi

Leng Keng viết 21:15 ngày 30/09/2018

mình chưa nhập c bạn ơi. mà mình thấy lỗi oy, do mình chạy vòng lặp for hơn số phần tử được nạp vào chuỗi. thank you!

Nguyễn Cừ viết 21:18 ngày 30/09/2018

nhờ các anh mà em vừa đc thông não.em xin chân thành cảm ơn

Bài liên quan
0