Question: The sample program DirectoryList.java (in the code directory), given as an example in section 11.2.2 of the textbook will print a list of files in
The sample program DirectoryList.java (in the code directory), given as an example in section 11.2.2 of the textbook will print a list of files in a directory specified by the user. But some of the files in that directory might themselves be directories. And the subdirectories can themselves contain directories. And so on. Write a modified version of DirectoryList that will list all the files in a directory and all its subdirectories, to any level of nesting. You will need a recursive subroutine to do the listing. The subroutine should have a parameter of type File. You will need the constructor from the File class that has the form
public File( File dir, String fileName ) // Constructs the File object representing a file // named fileName in the directory specified by dir.
SimpleFileChooser.java
package textcollage;
import java.awt.Component;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/**
* This class provides a slightly simplified interface to one of Java's
* standard JFileChooser dialogs. An object of type SimpleFileChooser
* has methods that allow the user to select files for input or output.
* If the object is used several times, the same JFileChooser is used
* each time. By default, the dialog box is set to the user's home
* directory the first time it is used, and after that it remembers the
* current directory between one use and the next. However, methods
* are provided for setting the current directory. (Note: On Windows,
* the user's home directory will probably mean the user's "My Documents"
* directory".)
*/
public class SimpleFileChooser {
private JFileChooser dialog; // The dialog, which is created when needed.
/**
* Reset the default directory in the dialog box to the user's home
* directory. The next time the dialog appears, it will show the
* contents of that directory.
*/
public void setDefaultDirectory() {
if (dialog != null)
dialog.setCurrentDirectory(null);
}
/**
* Set the default directory for the dialog box. The next time the
* dialog appears, it will show the contents of that directory.
* @param directoryName A File object that specifies the directory name.
* If this name is null, then the user's home directory will be used.
*/
public void setDefaultDirectory(String directoryName) {
if (dialog == null)
dialog = new JFileChooser();
dialog.setCurrentDirectory(new File(directoryName));
}
/**
* Set the default directory for the dialog box. The next time the
* dialog appears, it will show the contents of that directory.
* @param directoryName The name of the new default directory. If the
* name is null, then the user's home directory will be used.
*/
public void setDefaultDirectory(File directory) {
if (dialog == null)
dialog = new JFileChooser();
dialog.setCurrentDirectory(directory);
}
/**
* Show a dialog box where the user can select a file for reading.
* This method simply returns getInputFile(null,null).
* @see #getInputFile(Component, String)
* @return the selected file, or null if the user did not select a file.
*/
public File getInputFile() {
return getInputFile(null,null);
}
/**
* Show a dialog box where the user can select a file for reading.
* This method simply returns getInputFile(parent,null).
* @see #getInputFile(Component, String)
* @return the selected file, or null if the user did not select a file.
*/
public File getInputFile(Component parent) {
return getInputFile(parent,null);
}
/**
* Show a dialog box where the user can select a file for reading.
* If the user cancels the dialog by clicking its "Cancel" button or
* the Close button in the title bar, then the return value of this
* method is null. Otherwise, the return value is the selected file.
* Note that the file has to exist, but it is not guaranteed that the
* user is allowed to read the file.
* @param parent If the parent is non-null, then the window that contains
* the parent component becomes the parent window of the dialog box. This
* means that the window is "blocked" until the dialog is dismissed. Also,
* the dialog box's position on the screen should be based on the position of
* the window. Generally, you should pass your application's main window or
* panel as the value of this parameter.
* @param dialogTitle a title to be displayed in the title bar of the dialog
* box. If the value of this parameter is null, then the dialog title will
* be "Select Input File".
* @return the selected file, or null if the user did not select a file.
*/
public File getInputFile(Component parent, String dialogTitle) {
if (dialog == null)
dialog = new JFileChooser();
if (dialogTitle != null)
dialog.setDialogTitle(dialogTitle);
else
dialog.setDialogTitle("Select Input File");
int option = dialog.showOpenDialog(parent);
if (option != JFileChooser.APPROVE_OPTION)
return null; // User canceled or clicked the dialog's close box.
File selectedFile = dialog.getSelectedFile();
return selectedFile;
}
/**
* Show a dialog box where the user can select a file for writing.
* This method simply calls getOutputFile(null,null,null)
* @see #getOutputFile(Component, String, String)
* @return the selcted file, or null if no file was selected.
*/
public File getOutputFile() {
return getOutputFile(null,null,null);
}
/**
* Show a dialog box where the user can select a file for writing.
* This method simply calls getOutputFile(null,null,null)
* @see #getOutputFile(Component, String, String)
* @return the selcted file, or null if no file was selected.
*/
public File getOutputFile(Component parent) {
return getOutputFile(parent,null,null);
}
/**
* Show a dialog box where the user can select a file for writing.
* This method calls getOutputFile(parent,dialogTitle,null)
* @see #getOutputFile(Component, String, String)
* @return the selcted file, or null if no file was selected.
*/
public File getOutputFile(Component parent, String dialogTitle) {
return getOutputFile(parent,dialogTitle,null);
}
/**
* Show a dialog box where the user can select a file for writing.
* If the user cancels the dialog by clicking its "Cancel" button or
* the Close button in the title bar, then the return value of this
* method is null. A non-null value indicates that the user specified
* a file name and that, if the file exists, then the user wants to
* replace that file. (If the user selects a file that already exists,
* then the user will be asked whether to replace the existing file.)
* Note that it is not quaranteed that the selected file is actually
* writable; the user might not have permission to create or modify the file.
* @param parent If the parent is non-null, then the window that contains
* the parent component becomes the parent window of the dialog box. This
* means that the window is "blocked" until the dialog is dismissed. Also,
* the dialog box's position on the screen should be based on the position of
* the window. Generally, you should pass your application's main window or
* panel as the value of this parameter.
* @param dialogTitle a title to be displayed in the title bar of the dialog
* box. If the value of this parameter is null, then the dialog title will
* be "Select Input File".
* @param defaultFile when the dialog appears, this name will be filled in
* as the name of the selected file. If the value of this parameter is null,
* then the file name box will be empty.
* @return the selected file, or null if the user did not select a file.
*/
public File getOutputFile(Component parent,
String dialogTitle, String defaultFile) {
if (dialog == null)
dialog = new JFileChooser();
if (dialogTitle != null)
dialog.setDialogTitle(dialogTitle);
else
dialog.setDialogTitle("Select Output File");
if (defaultFile == null)
dialog.setSelectedFile(null);
else
dialog.setSelectedFile(new File(defaultFile));
while (true) {
int option = dialog.showSaveDialog(parent);
if (option != JFileChooser.APPROVE_OPTION)
return null; // User canceled or clicked the dialog's close box.
File selectedFile = dialog.getSelectedFile();
if ( ! selectedFile.exists() )
return selectedFile;
else { // Ask the user whether to replace the file.
int response = JOptionPane.showConfirmDialog( parent,
"The file \"" + selectedFile.getName()
+ "\" already exists. Do you want to replace it?",
"Confirm Save",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE );
if (response == JOptionPane.CANCEL_OPTION)
return null; // User does not want to select a file.
if (response == JOptionPane.YES_OPTION)
return selectedFile; // User wants to replace the file
// A "No" response will cause the file dialog to be shown again.
}
}
}
}
package textcollage;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
/**
* This main program simply shows a window that contains
* a DrawTextPanel and the menu bar for that panel.
*/
public class TextCollage {
public static void main(String[] args) {
JFrame frame = new JFrame("Text Collage");
DrawTextPanel panel = new DrawTextPanel();
frame.setContentPane( panel );
frame.setJMenuBar(panel.getMenuBar());
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation( (screenSize.width - frame.getWidth())/2,
(screenSize.height - frame.getHeight())/2 );
frame.setVisible(true);
}
}
TextCollage.java
package textcollage;
import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JFrame;
/** * This main program simply shows a window that contains * a DrawTextPanel and the menu bar for that panel. */ public class TextCollage {
public static void main(String[] args) { JFrame frame = new JFrame("Text Collage"); DrawTextPanel panel = new DrawTextPanel(); frame.setContentPane( panel ); frame.setJMenuBar(panel.getMenuBar()); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation( (screenSize.width - frame.getWidth())/2, (screenSize.height - frame.getHeight())/2 ); frame.setVisible(true); }
}
DrawTextPanel.java
package textcollage;
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.io.File; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.BorderFactory; import javax.swing.JColorChooser; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.KeyStroke;
/** * A panel that contains a large drawing area where strings * can be drawn. The strings are represented by objects of * type DrawTextItem. An input box under the panel allows * the user to specify what string will be drawn when the * user clicks on the drawing area. */ public class DrawTextPanel extends JPanel {
// As it now stands, this class can only show one string at at // a time! The data for that string is in the DrawTextItem object // named theString. (If it's null, nothing is shown. This // variable should be replaced by a variable of type // ArrayList
private DrawTextItem theString; // change to an ArrayList
private Color currentTextColor = Color.BLACK; // Color applied to new strings.
private Canvas canvas; // the drawing area. private JTextField input; // where the user inputs the string that will be added to the canvas private SimpleFileChooser fileChooser; // for letting the user select files private JMenuBar menuBar; // a menu bar with command that affect this panel private MenuHandler menuHandler; // a listener that responds whenever the user selects a menu command private JMenuItem undoMenuItem; // the "Remove Item" command from the edit menu
/** * An object of type Canvas is used for the drawing area. * The canvas simply displays all the DrawTextItems that * are stored in the ArrayList, strings. */ private class Canvas extends JPanel { Canvas() { setPreferredSize( new Dimension(800,600) ); setBackground(Color.LIGHT_GRAY); setFont( new Font( "Serif", Font.BOLD, 24 )); } protected void paintComponent(Graphics g) { super.paintComponent(g); ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if (theString != null) theString.draw(g); } }
/** * An object of type MenuHandler is registered as the ActionListener * for all the commands in the menu bar. The MenuHandler object * simply calls doMenuCommand() when the user selects a command * from the menu. */ private class MenuHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { doMenuCommand( evt.getActionCommand()); } }
/** * Creates a DrawTextPanel. The panel has a large drawing area and * a text input box where the user can specify a string. When the * user clicks the drawing area, the string is added to the drawing * area at the point where the user clicked. */ public DrawTextPanel() { fileChooser = new SimpleFileChooser(); undoMenuItem = new JMenuItem("Remove Item"); undoMenuItem.setEnabled(false); menuHandler = new MenuHandler(); setLayout(new BorderLayout(3,3)); setBackground(Color.BLACK); setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); canvas = new Canvas(); add(canvas, BorderLayout.CENTER); JPanel bottom = new JPanel(); bottom.add(new JLabel("Text to add: ")); input = new JTextField("Hello World!", 40); bottom.add(input); add(bottom, BorderLayout.SOUTH); canvas.addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e) { doMousePress( e ); } } ); }
/** * This method is called when the user clicks the drawing area. * A new string is added to the drawing area. The center of * the string is at the point where the user clicked. * @param e the mouse event that was generated when the user clicked */ public void doMousePress( MouseEvent e ) { String text = input.getText().trim(); if (text.length() == 0) { input.setText("Hello World!"); text = "Hello World!"; } DrawTextItem s = new DrawTextItem( text, e.getX(), e.getY() ); s.setTextColor(currentTextColor); // Default is null, meaning default color of the canvas (black).
// SOME OTHER OPTIONS THAT CAN BE APPLIED TO TEXT ITEMS: // s.setFont( new Font( "Serif", Font.ITALIC + Font.BOLD, 12 )); // Default is null, meaning font of canvas. // s.setMagnification(3); // Default is 1, meaning no magnification. // s.setBorder(true); // Default is false, meaning don't draw a border. // s.setRotationAngle(25); // Default is 0, meaning no rotation. // s.setTextTransparency(0.3); // Default is 0, meaning text is not at all transparent. // s.setBackground(Color.BLUE); // Default is null, meaning don't draw a background area. // s.setBackgroundTransparency(0.7); // Default is 0, meaning background is not transparent.
theString = s; // Set this string as the ONLY string to be drawn on the canvas! undoMenuItem.setEnabled(true); canvas.repaint(); }
/** * Returns a menu bar containing commands that affect this panel. The menu * bar is meant to appear in the same window that contains this panel. */ public JMenuBar getMenuBar() { if (menuBar == null) { menuBar = new JMenuBar();
String commandKey; // for making keyboard accelerators for menu commands if (System.getProperty("mrj.version") == null) commandKey = "control "; // command key for non-Mac OS else commandKey = "meta "; // command key for Mac OS
JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); JMenuItem saveItem = new JMenuItem("Save..."); saveItem.setAccelerator(KeyStroke.getKeyStroke(commandKey + "N")); saveItem.addActionListener(menuHandler); fileMenu.add(saveItem); JMenuItem openItem = new JMenuItem("Open..."); openItem.setAccelerator(KeyStroke.getKeyStroke(commandKey + "O")); openItem.addActionListener(menuHandler); fileMenu.add(openItem); fileMenu.addSeparator(); JMenuItem saveImageItem = new JMenuItem("Save Image..."); saveImageItem.addActionListener(menuHandler); fileMenu.add(saveImageItem);
JMenu editMenu = new JMenu("Edit"); menuBar.add(editMenu); undoMenuItem.addActionListener(menuHandler); // undoItem was created in the constructor undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(commandKey + "Z")); editMenu.add(undoMenuItem); editMenu.addSeparator(); JMenuItem clearItem = new JMenuItem("Clear"); clearItem.addActionListener(menuHandler); editMenu.add(clearItem);
JMenu optionsMenu = new JMenu("Options"); menuBar.add(optionsMenu); JMenuItem colorItem = new JMenuItem("Set Text Color..."); colorItem.setAccelerator(KeyStroke.getKeyStroke(commandKey + "T")); colorItem.addActionListener(menuHandler); optionsMenu.add(colorItem); JMenuItem bgColorItem = new JMenuItem("Set Background Color..."); bgColorItem.addActionListener(menuHandler); optionsMenu.add(bgColorItem);
} return menuBar; }
/** * Carry out one of the commands from the menu bar. * @param command the text of the menu command. */ private void doMenuCommand(String command) { if (command.equals("Save...")) { // save all the string info to a file JOptionPane.showMessageDialog(this, "Sorry, the Save command is not implemented."); } else if (command.equals("Open...")) { // read a previously saved file, and reconstruct the list of strings JOptionPane.showMessageDialog(this, "Sorry, the Open command is not implemented."); canvas.repaint(); // (you'll need this to make the new list of strings take effect) } else if (command.equals("Clear")) { // remove all strings theString = null; // Remove the ONLY string from the canvas. undoMenuItem.setEnabled(false); canvas.repaint(); } else if (command.equals("Remove Item")) { // remove the most recently added string theString = null; // Remove the ONLY string from the canvas. undoMenuItem.setEnabled(false); canvas.repaint(); } else if (command.equals("Set Text Color...")) { Color c = JColorChooser.showDialog(this, "Select Text Color", currentTextColor); if (c != null) currentTextColor = c; } else if (command.equals("Set Background Color...")) { Color c = JColorChooser.showDialog(this, "Select Background Color", canvas.getBackground()); if (c != null) { canvas.setBackground(c); canvas.repaint(); } } else if (command.equals("Save Image...")) { // save a PNG image of the drawing area File imageFile = fileChooser.getOutputFile(this, "Select Image File Name", "textimage.png"); if (imageFile == null) return; try { // Because the image is not available, I will make a new BufferedImage and // draw the same data to the BufferedImage as is shown in the panel. // A BufferedImage is an image that is stored in memory, not on the screen. // There is a convenient method for writing a BufferedImage to a file. BufferedImage image = new BufferedImage(canvas.getWidth(),canvas.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setFont(canvas.getFont()); canvas.paintComponent(g); // draws the canvas onto the BufferedImage, not the screen! boolean ok = ImageIO.write(image, "PNG", imageFile); // write to the file if (ok == false) throw new Exception("PNG format not supported (this shouldn't happen!)."); } catch (Exception e) { JOptionPane.showMessageDialog(this, "Sorry, an error occurred while trying to save the image: " + e); } } }
}
DrawTextItem.java
package textcollage;
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D;
/** * An object of type DrawText can draw a string in * a graphics context, with various effects, such as * color, magnification, and rotation The string * is specified in the constructor and cannot be changed. * The position and other properties can be changed. */ public class DrawTextItem {
private final String string; // The String that is drawn by this item.
private Font font = null; private int x = 0; private int y = 0; private Color textColor = Color.BLACK; private Color background = null; private boolean border = false; private double rotationAngle = 0; private double magnification = 1; private double textTransparency = 0; private double backgroundTransparency = 0;
/** * Create a DrawTextItem to draw a specified string. Initially, * the position is set to (0,0) and all properties have their * default values. * @throws NullPointerException if the parameter is null */ public DrawTextItem(String stringToDraw) { this(stringToDraw,0,0); }
/** * Create a DrawTextItem to draw a specified string. Initially, * the position is set to (x,y) and all other properties have their * default values. Note that x and y give the position of * the center of the string. * @param x the x-coordinate where the string will be drawn. * @param y the y-coordinate where the string will be drawn. * @throws NullPointerException if the parameter is null */ public DrawTextItem(String stringToDraw, int x, int y) { if (stringToDraw == null) throw new NullPointerException("String can't be null."); string = stringToDraw; this.x = x; this.y = y; }
/** * Draw this item's string in the given Graphics constext, * applying all of this item's property settings. * @param g the graphics context in which the string will * be drawn. Note that this is assumed to be actually of * type Graphics2D (which should not be a problem). */ public void draw(Graphics g) { Graphics2D g2 = (Graphics2D)g.create(); if (font != null) g2.setFont(font); FontMetrics fm = g2.getFontMetrics(); int width = fm.stringWidth(string); int height = fm.getAscent() + fm.getDescent(); g2.translate(x,y); if (magnification != 1) { float pixelSize = 1/(float)magnification; g2.setStroke( new BasicStroke(pixelSize) ); // magnification won't apply to border g2.scale(magnification,magnification); } if (rotationAngle > 0) g2.rotate( -Math.PI * (rotationAngle / 180)); Color colorToUseForText = textColor; if (colorToUseForText == null) colorToUseForText = g2.getColor(); if (background != null) { if (backgroundTransparency == 0) g2.setColor(background); else g2.setColor( new Color( background.getRed(), background.getGreen(), background.getBlue(), (int)(255*(1-backgroundTransparency))) ); g2.fillRect(-width/2 - 3, -height/2 - 3, width + 6, height + 6); } if (textTransparency == 0) g2.setColor(colorToUseForText); else g2.setColor( new Color( colorToUseForText.getRed(), colorToUseForText.getGreen(), colorToUseForText.getBlue(), (int)(255*(1-textTransparency)) ) ); if (border) g2.drawRect(-width/2 -3, -height/2 - 3, width + 6, height + 6); g2.drawString(string,-width/2, -height/2 + fm.getAscent()); }
/** * Returns the string that is drawn by this DrawTextItem. The * string is set in the constructor and cannot be changed. */ public String getString() { return string; }
/** * Set the background color. If the value is non-null, then * a rectangle of this color is drawn behind the string. * If the value is null, no background rectangle is drawn. * The default value is null. */ public void setBackground(Color background) { this.background = background; }
/** * Set the level of transparency of the background color, where 0 indicates * no transparency and 1 indicates completely transparent. If the value * is not 1, then the transparency level of the background color is set to * this value. If the background color is null, then the value of * backgroundTransparency is ignored. The default value is zero. * @param backgroundTransparency the background transparency level, in the range 0 to 1 * @throws IllegalArgumentException if the parameter is less than 0 or greater than 1 */ public void setBackgroundTransparency(double backgroundTransparency) { if (backgroundTransparency < 0 || backgroundTransparency > 1) throw new IllegalArgumentException("Transparency must be in the range 0 to 1."); this.backgroundTransparency = backgroundTransparency; }
/** * If border is set to true, then a rectangular border is drawn around * the string. The default value is false. */ public void setBorder(boolean border) { this.border = border; }
/** * Sets the font to be used for drawing the string. A value of * null indicates that the font that is set for the graphics context * where the string is drawn should be used. The default value is * null. */ public void setFont(Font font) { this.font = font; }
/** * Set a magnification level that is applied when the string is drawn. * A magnification of 2 will double the size; a value of 0.5 will cut * it in half. Negative values will produce backwards, upside-down text. * Zero is not a legal value, and an attempt to set the magnification to * zero will cause an IllegalArgumentException. The default value is * 1, Indicating no magnification. */ public void setMagnification(double magnification) { if (magnification == 0) throw new IllegalArgumentException("Magnification cannot be 0."); this.magnification = magnification; }
/** * Sets the angle of the baseline of the string with respect to the * horizontal. The angle is specified in degrees. The default is * 0, which gives normal, unrotated, horizontal text. */ public void setRotationAngle(double rotationAngle) { this.rotationAngle = rotationAngle; }
/** * Sets the color to be used for drawing the text (and the border if there is one). * The default value is null, which means that the color that is set in the * graphics context where the string is drawn will be used for drawing the text. */ public void setTextColor(Color textColor) { this.textColor = textColor; }
/** * Set the level of transparency of the text color, where 0 indicates * no transparency and 1 indicates completely transparent. If the value * is not 1, then the transparency level of the text color is set to * this value. This property is also applied to the border, if there is one. * The default value is zero. * @param textTransparency the text transparency level, in the range 0 to 1 * @throws IllegalArgumentException if the parameter is less than 0 or greater than 1 */ public void setTextTransparency(double textTransparency) { if (textTransparency < 0 || textTransparency > 1) throw new IllegalArgumentException("Transparency must be in the range 0 to 1."); this.textTransparency = textTransparency; }
/** * Set the x-coordinate where the string is drawn. This gives the position of * the center of the string. */ public void setX(int x) { this.x = x; }
/** * Set the y-coordinate where the string is drawn. This gives the position of * the center of the string. */ public void setY(int y) { this.y = y; }
/** * returns the value of the background color property */ public Color getBackground() { return background; }
/** * returns the value of the background transparency property */ public double getBackgroundTransparency() { return backgroundTransparency; }
/** * returns the value of the border property */ public boolean getBorder() { return border; }
/** * returns the value of the font property */ public Font getFont() { return font; }
/** * returns the value of the magnification property */ public double getMagnification() { return magnification; }
/** * returns the value of the rotation angle property */ public double getRotationAngle() { return rotationAngle; }
/** * returns the value of the text color property */ public Color getTextColor() { return textColor; }
/** * returns the value of the text transparency property */ public double getTextTransparency() { return textTransparency; }
/** * returns the x-coord of the center of the string */ public int getX() { return x; }
/** * returns the y-coord of the center of the string */ public int getY() { return y; }
}
DirectoryList.java
import java.io.File; import java.util.Scanner;
/** * This program lists the files in a directory specified by * the user. The user is asked to type in a directory name. * If the name entered by the user is not a directory, a * message is printed and the program ends. */ public class DirectoryList {
public static void main(String[] args) {
String directoryName; // Directory name entered by the user. File directory; // File object referring to the directory. String[] files; // Array of file names in the directory. Scanner scanner; // For reading a line of input from the user.
scanner = new Scanner(System.in); // scanner reads from standard input.
System.out.print("Enter a directory name: "); directoryName = scanner.nextLine().trim(); directory = new File(directoryName);
if (directory.isDirectory() == false) { if (directory.exists() == false) System.out.println("There is no such directory!"); else System.out.println("That file is not a directory."); } else { files = directory.list(); System.out.println("Files in directory \"" + directory + "\":"); for (int i = 0; i < files.length; i++) System.out.println(" " + files[i]); }
} // end main()
} // end class DirectoryList
***Please do not forget to post the output and please do not copy and paste someone else's answer or take the answer from a website over the internet. Thanks***
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
