Как создавать каталог с JOptionPane?

Я хочу прочитать текст, который я ввожу в компьютер в JOptionPane чтобы создавать папку.

Пример: Если я делаю следующее, он следует мне используя один JTextField:

carpeta=new File(ruta,JTextField.getText());

Код:

import java.io. File; import javax.swing. JOptionPane;

public class VentanaProyecto extends javax.swing.JFrame
{
    File ruta=new File("/Users/brianreyes/FBD/");
    File carpeta;
    File archivo;

    String opp;

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt)
    {                                 
        opp = (javax.swing.JOptionPane.showInputDialog("Introduce el nombre de la bd"));

        archivo= new File(ruta,"BASES.db");    
        carpeta=new File(ruta,opp); //Es en esta parte donde no me permite crearlo.
        //Dentro de la ruta.
        try {
            if (!carpeta.exists())
            {
                carpeta.mkdir();   
            }
            else if(carpeta.exists())
            {
                JOptionPane.showMessageDialog(null, "La carpeta ya existe.");
            }
        } catch (Exception e)
        {
        }
        if(!archivo.exists())
        {
            try{archivo.createNewFile();}catch(Exception e){}
        }
        else if(archivo.exists())
        {
            JOptionPane.showMessageDialog(null, "El archivo ya existe.");
        }
    }
}
1
задан 12.03.2017, 02:02
1 ответ

Я упростил систему и реорганизованный немного твой c¦digo. Протестированный в windows функционируй хорошо.

Это класс с main

public class TestCrearDirectorio {

    /**
     * @param args the command line arguments
     */
    public static void main( String[] args ) {

        new Xxx();
    }

} //class

Класс, который делает работу:

//imports
import java.io.File; 
import javax.swing.*;

public class Xxx extends JFrame {

    private File ruta = new File( "test/" );
    private File carpeta;
    private File archivo;

    private String opp;

    /**
     * Construct
     * 
     */
    public Xxx() {
        super( "Prueba crear directorio" ); //set tittle
        setDefaultCloseOperation( EXIT_ON_CLOSE );
        setSize( 300, 200 );

        //La siguiente llamada reemplaza a la que se produciría sobre 
        //el método lanzado por el evento, por ejemplo al pulsar un 
        //botón, para el ejemplo pongo solo la parte que interesa
        execute(); 
    }


    private void execute() {
        opp = JOptionPane.showInputDialog( "Introduce el nombre de la bd" );

        archivo = new File( ruta, "BASES.db" );    
        carpeta = new File( ruta, opp );

        //Traza
        System.out.println( "archivo -> " + archivo );
        System.out.println( "carpeta -> " + carpeta );

        crearCarpeta();
        crearFichero();
    }

    private void crearCarpeta() {

        //La carpeta NO existe -> intenta crearla
        if ( ! carpeta.exists( )) {

            try {
                carpeta.mkdir();

            } catch (Exception e) { 
                JOptionPane.showMessageDialog( 
                    null, 
                    "Error creando carpeta."
                );
                System.err.println( e.toString( ));
            }

        //La carpeta YA existe
        } else {
            JOptionPane.showMessageDialog( 
                null, 
                "La carpeta ya existe." 
            );
        }
    }

    private void crearFichero() {
        //El archivo NO existe -> intenta crearlo
        if ( ! archivo.exists( )) {

            try {
                archivo.createNewFile();

            } catch( Exception e ) {
                JOptionPane.showMessageDialog( 
                    null, 
                    "Error creando archivo."
                );
                System.err.println( e.toString( ));
            }

        } else {
            JOptionPane.showMessageDialog(
                null, 
                "El archivo ya existe."
            );
        }
    }

} //class

то, что мне показалось редким в твоем c¦digo, является порядком укрытый try-catch с порядком условных, и что ты спрашиваешь два раза тот же condici¦n в каждом блоке. Сначала, когда ты стараешься создавать папку, все эта внутри try-catch, даже вопрос, если уже существует папка. Чтобы создавать файл try-cath включает только creaci¦n файла. Относительно этого, поскольку ты ничего не помещаешь в catch, ты не получаешь никакого informaci¦n, на котором он не удается внутри этих структур, только избегая того, чтобы бросились исключения, asà - твой c¦digo не удается молча, и ты закончился aquà - спрашивая. Потом условные, тип:

a es 1
si a es diferente de 1 hacer X
si a es igual a 1 hacer Z

podr¦-схвати выражать их as¦-:

int a = 1;
if ( a != 1 ) {
   //hacer X
}
if ( a == 1 ) {
   //hacer Z
}

, но если ты используешь else, как только есть два возможных ответов в этом случае, или в valo 1 или не стоит 1, ser¦ - в:

int a = 1;
if ( a != 1 ) {
   //hacer X

} else {
   //hacer Z
}

, Если он не вводит в блок if (в es 1) вводит в else (в es 1). Вновь спрашивать эту mÃ: s и в mÃ: s c¦digo mÃ: s возможность неудач, mÃ: s потребление ресурсов, c¦digo менее чистый, mÃ: s d¦-ficil поддержания... мы идем, что он плохой, как проникновение головы в глиняный кувшин, если эти s¦lo дома.

0
ответ дан 24.11.2019, 10:38