如何避免这种冗余并关闭未使用的File类?

时间:2019-05-14 13:32:09

标签: java file io

简介

我正在做一些作业,负责执行一个使用路径(绝对)管理文件的程序。读取文件信息,写入/读取文件等。

我的尝试

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package fichersapren;

import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;

/**
 *
 * @author alumneM
 */
public class FitxersApren {

    public static String working_path = "";
    public static Calendar cal;


    /**
     * Get username from system
     */
    public static void obtenirNomUsuari()
    {
        System.out.println(System.getProperty("user.name"));
    }
    /**
     * Create file
     * 
     * @param path
     * @throws IOException 
     */
    public static void crearFicher(String path) throws IOException
    {
        File cf = new File(path);
        cf.createNewFile();
    }
    /**
     * Create Directory
     * 
     * @param path 
     */
    public static void crearDirectori(String path)
    {     
        File cd = new File(path);
        cd.mkdir();
    }
    /**
     * Get file info
     * 
     * @param path 
     */
    public static void mostrarInfoFitcher(String path)
    {
        File infoF = new File(path);
        System.out.println("Nombre fichero: " + infoF.getName());
        System.out.println("Permisos: ");
        System.out.println(" - Escritura: " + infoF.canWrite() + " ");
        System.out.println(" - Lectura: " + infoF.canRead() + " ");
        System.out.println(" - Ejecucion: " + infoF.canExecute() + " ");
        System.out.println("Ruta: " + infoF.getAbsolutePath() + " ");
        System.out.println("Tamaño: " + infoF.length() + " ");
        //cal.setTimeInMillis(infoF.lastModified());
        //System.out.println("Fecha: " + cal.get(Calendar.YEAR));
    }
    /**
     * Get directory info
     * 
     * @param path 
     */
    public static void mostrarInfoDirectori(String path)
    {
        File infoD = new File(path);
        System.out.println("Nombre directorio: " + infoD.getName());
        System.out.println("Permisos: ");
        System.out.println(" - Escritura: " + infoD.canWrite() + " ");
        System.out.println(" - Lectura: " + infoD.canRead() + " ");
        System.out.println(" - Ejecucion: " + infoD.canExecute() + " ");
        System.out.println("Ruta: " + infoD.getAbsolutePath() + " ");
        System.out.println("Tamaño: " + infoD.length() + " ");
        //cal.setTimeInMillis(infoD.lastModified());
        //System.out.println("Fecha: " + cal.get(Calendar.YEAR));
    }
    /**
     * Delete dile
     * 
     * @param path 
     */
    public static void esborrarFitxer(String path)
    {
        File file_del = new File(path);
        file_del.delete();

       // closeMe(file_del);
    }
    /**
     * Delete directory
     * 
     * @param path 
     */
    public static void esborrarDirectori(String path)
    {
        File dir_del = new File(path);
        dir_del.delete();

        //closeMe(dir_del);
    }
    /**
     * Change file name
     * 
     * @param path
     * @param nom 
     */
    public static void canviarNom(String path, String nom)
    {
        File nom_file = new File(path);




    }
    /**
     * My try at a general method to close File classes
     * 
     * @param path 
     */
    public static void closeMe(Closeable path)
    {
        try
        {
            path.close();
        }
        catch (Exception e)
        {
            System.out.println("Could not be closed");
        }
    }



    /**
     * Main method
     * 
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        mostrarInfoFitcher("C:\\Users\\alumneM\\Desktop\\bitcoin.txt");
        mostrarInfoFitcher("C:\\Users\\alumneM\\Desktop\\bitcoin.docx");





    }    
}

问题

  1. 在这些方法中具有所有这些File类,这使我相信它效率不高。肯定还有其他更好,更专业的东西。

  2. 下面是我遇到的第一个问题,当不使用每个方法上的File类变量时会发生什么?它会消耗资源吗?如何关闭它?

    2.1在第二个问题之后,我可以简单地对这些变量使用.close()方法,但我不明白为什么。

我要在这个问题中寻找什么?

  • 了解我的错误并从中学习
  • 编码类似程序或处理文件的新提示
  • 建议是如何改善我的编码方式

注释

  • 我添加了Javadoc以帮助理解该方法及其目标。

目标

我想制作一个Java程序,在其中输入文件的路径,然后可以在其上应用这些方法。

1 个答案:

答案 0 :(得分:1)

在您的主文件或声明新文件的地方,都可以执行以下操作来创建文件并调用方法:

    String path = "/example";
    File file = new File(path);
    esborrarDirectori(file);

如果让每种方法都使用File作为参数,例如,一个将如下所示:

public static void esborrarDirectori(File file)
{
    file.delete();
}

如果您要对文件执行其他操作,还可以使用自己的方法创建返回文件:

public static File createFile(String path) {
    File file = new File(path);
    return file;
}

可以通过以下方式使用它:

    String path = "/example";
    File file = createFile(path);

除非您打算向createFile()方法添加一些其他功能,否则这没有什么用。

通常,为了良好实践,除非您实际上正在打开新文件,否则不应创建新的File。如果您多次使用相同的File,则应创建一次,然后将其发送给需要使用的方法。