如何修改Java文件读取方法以支持用户输入文件名?
Hey Aaran, no worries at all—let's tweak your fileReader method to accept a user-specified filename with just a few straightforward changes. Here's a step-by-step breakdown:
Step 1: Add a Filename Parameter to the Method
First, update the method signature to take a String parameter for the filename. This lets you pass in any filename (or full file path) when calling the method, making it dynamic instead of tied to one fixed file.
Step 2: Replace the Hardcoded Path
Swap out the static file path in FileInputStream with your new parameter. This is the core change that makes the method accept user input.
Step 3: Fix a Content Collection Bug
Your original code overwrites str2 with each new line, so it only returns the last line of the file. Let's use a StringBuilder to efficiently collect all lines of content instead.
Modified Full Code
import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; public class YourClass { // Replace with your actual class name public static String fileReader(String fileName) { StringBuilder contentBuilder = new StringBuilder(); try { Scanner sc = new Scanner(new FileInputStream(fileName)); while (sc.hasNextLine()) { contentBuilder.append(sc.nextLine()).append("\n"); } sc.close(); } catch (IOException e) { System.out.println("Error reading file: " + e.getMessage()); // Uncomment below for detailed debugging info: // e.printStackTrace(); } return contentBuilder.toString().trim(); // Removes extra trailing newline } // Example: Call the method with user input from console public static void main(String[] args) { Scanner userInput = new Scanner(System.in); System.out.print("Enter filename (or full path): "); String userFileName = userInput.nextLine(); userInput.close(); String fileContent = fileReader(userFileName); System.out.println("\nFile content:\n" + fileContent); } }
Key Notes
- Path Types: If the file is in the same directory as your class, just pass the filename (e.g.,
"notes.txt"). For files elsewhere, use the full path (like your original hardcoded path). - Error Handling: The updated error message includes specific exception details, which helps fix issues like typos in the filename.
- Efficiency:
StringBuilderis better than string concatenation (+=) because it avoids creating unnecessary String objects, especially for large files.
内容的提问来源于stack exchange,提问作者Dan Tepper

