Как избежать этой избыточности и закрыть неиспользуемые классы файлов? - PullRequest
3 голосов
/ 14 мая 2019

Введение

Я делаю домашнюю работу, где мне поручено создать программу, которая управляет файлами, используя путь (абсолютный).Чтение информации о файле, запись / чтение и т. Д.

Моя попытка

/*
 * 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 Ответ

1 голос
/ 14 мая 2019

В вашем основном или везде, где вы объявляете новый файл, вы можете сделать это, чтобы создать файл и вызвать метод:

    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 несколько раз, вы должны создать его один раз и отправить в методы, которые необходимо использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...