2009-06-28 3 views

Trả lời

26

Chỉ đường dẫn của tập tin được thông qua, bên trong chương trình của bạn sử dụng lớp Java File để xử lý nó

này có các tham số đầu tiên là đường dẫn tập tin:

import java.io.File; 

public class SomeProgram { 
    public static void main(String[] args) { 
     if(args.length > 0) { 
      File file = new File(args[0]); 

      // Work with your 'file' object here 
     } 
    } 
} 
+0

bạn có thể cho tôi biết thêm về ý nghĩa của bạn với "arg [0]" Tôi không thể tìm thấy nguồn hữu ích để đọc chủ đề dòng lệnh.: ((((( – Johanna

+0

Đọc phần "phương pháp chính" tại http://java.sun.com/docs/books/tutorial/getStarted/application/index.html Nó mô tả một cách hợp lý những gì "args" là. Hướng dẫn chính nó là một nguồn tốt cho việc tìm kiếm câu trả lời cho một số –

+0

@Johanna: Các args [0] đang truy cập mảng chuỗi args tại vị trí 0 (phần tử đầu tiên của mảng). args được chuyển thành tham số cho phương thức chính (String [] args), và là một chuỗi các chuỗi chứa các đối số dòng lệnh được chuyển đến chương trình – Sean

7

trong Java, main phương thức nhận một mảng String làm đối số, như bạn có thể đã nhận thấy. bạn có thể đặt tên khác cho tham số args, nhưng đây là tên được sử dụng nhiều nhất.

mảng args chứa các giá trị của những gì người dùng đã nhập khi khởi chạy chương trình của bạn, sau tên lớp. ví dụ, để chạy một lớp có tên Foo, người dùng phải gõ:

[user @ desktop ~] $ java Foo

mọi thứ mà người dùng sau khi tên lớp được coi là một tham số . ví dụ:

[user @ desktop ~] $ java Foo thanh baz

tại chương trình của bạn đã nhận được hai thông số: thanhbaz. các tham số đó được lưu trữ trong mảng args. như một mảng Java thông thường, tham số đầu tiên có thể được truy xuất bằng cách truy cập args[0], tham số thứ hai có thể được truy xuất bằng cách truy cập args[1], v.v. nếu bạn cố gắng truy cập vào vị trí không hợp lệ (khi người dùng không nhập những gì bạn mong đợi), câu lệnh đó sẽ ném một số ArrayIndexOutOfBoundsException, giống như nó sẽ với bất kỳ mảng nào. bạn có thể kiểm tra xem có bao nhiêu tham số được nhập với args.length.

để quay lại câu hỏi của bạn. người dùng có thể thông báo tên tệp dưới dạng tham số dòng lệnh và bạn có thể đọc giá trị đó thông qua đối số của phương thức main, thường được gọi là args. bạn phải kiểm tra xem anh ta có thực sự gõ một cái gì đó như một đối số (kiểm tra chiều dài mảng) hay không và nếu được, bạn truy cập args[0] để đọc những gì anh ta đã gõ. sau đó, bạn có thể tạo một đối tượng File dựa trên chuỗi đó và thực hiện những gì bạn muốn làm với nó. luôn kiểm tra xem người dùng đã nhập số tham số bạn đang mong đợi hay không, nếu không bạn sẽ nhận được một ngoại lệ khi truy cập mảng.

đây là một ví dụ đầy đủ về cách sử dụng các tham số dòng lệnh:

public class Foo { 
    public static void main(String[] args) { 
     if (args.length == 0) { 
      System.out.println("no arguments were given."); 
     } 
     else { 
      for (String a : args) { 
       System.out.println(a); 
      } 
     } 
    } 
} 

lớp này sẽ phân tích các thông số thông báo của người dùng. nếu anh ta không gõ bất cứ điều gì, lớp sẽ in thông báo "không có lý lẽ nào được đưa ra." nếu anh ta thông báo cho bất kỳ số tham số nào, các tham số đó sẽ được hiển thị trên màn hình. như vậy, chạy lớp này với hai ví dụ tôi đã đưa vào câu trả lời này, đầu ra sẽ là:

[user @ desktop ~] $ java Foo
không có đối số được đưa ra.
[user @ desktop ~] $ java thanh Foo baz
thanh
baz

2

Theo tôi, thực hành tốt nhất để cố gắng phát hiện args == 0 và trả về một danh sách các lệnh giúp đỡ về cách sử dụng chương trình nếu không có đối số nào được cung cấp.

+1

Chào mừng bạn đến với StackOverflow! Tôi nghĩ rằng các poster muốn biết làm thế nào để giải quyết nó nếu args> 0, thực sự. –

0

Tôi đã thấy một vài giải pháp khác, nhưng tôi nghĩ chúng sẽ không hoạt động nếu bạn. Ví dụ: cung cấp C:\Program Files\file.dat làm đối số dòng lệnh. Sau đó, nó sẽ không hoạt động, vì bạn chỉ cần args[0] khi tạo tệp mới.

Vì vậy, bạn thực sự nên làm một cái gì đó như sau, tham gia tất cả các phần của đối số nhất định và sau đó tạo ra một tập tin từ nó:

import java.io.File; 

public class SomeProgram { 
    public static void main(String[] args) { 
     String current = ""; 
     File lastFile = null; 
     for(String str : args){ 
      File newFile = new File((current + " " + str).trim()); 
      if(newFile.exists()){ 
       lastFile = newFile; 
      } 
     current += " " + str; 
     } 
     File yourFile = lastFile; 
    } 
} 

Tôi hiện đang làm việc trên một vấn đề tương tự và điều này dường như làm lừa.

+0

Đây là một giải pháp tốt iff đối số (s) được thông qua cho chương trình là một đường dẫn tập tin có chứa không gian. Tuy nhiên, đây không phải là một cách tiếp cận tốt nếu nhiều hơn chỉ là một đường dẫn tập tin đang được chuyển đến chương trình. Cách tiếp cận thích hợp là bao quanh đường dẫn tệp bằng dấu ngoặc kép trước khi gửi nó đến chương trình. Chương trình sau đó sẽ kiểm tra xem mỗi đối số có thuộc loại chính xác hay không và nếu không hiển thị đúng trường hợp sử dụng và thoát. –