本文概述
有以下几种方法可以用Java打开文件:
- Java Desktop类
- Java FileInputStream类
- Java BufferedReader类
- Java FileReader类
- Java Scanner类
- Java Nio软件包
Java Desktop类
Java Desktop类提供了open()方法来打开文件。它属于java.awt包。桌面实施取决于平台, 因此有必要检查操作系统是否支持桌面。 Desktop类查找在本机桌面上注册的关联应用程序以处理文件。如果没有关联的应用程序或应用程序无法启动, 则会引发FileNotFoundException。启动用户默认浏览器以显示指定的URI。
- 使用可选的mail-to URI启动用户默认邮件客户端。
- 启动注册的应用程序以打开, 编辑或打印指定的文件。
Desktop类的open()方法启动关联的应用程序以打开文件。它以文件作为参数。该方法的签名是:
public void open (File file) throws IOException
该方法引发以下异常:
- NullPointerException:如果文件为null。
- IllegalArgumentException:当文件不存在时引发。
- IOException:当没有与给定文件类型关联的应用程序时引发。
- UnsupportedOperationExecution:如果当前平台不支持Desktop.Action.Open操作。
例
import java.awt.Desktop;
import java.io.*;
public class OpenFileExample1
{
public static void main(String[] args)
{
try
{
//constructor of file class having file as argument
File file = new File("C:\\demo\\demofile.txt");
if(!Desktop.isDesktopSupported())//check if Desktop is supported by Platform or not
{
System.out.println("not supported");
return;
}
Desktop desktop = Desktop.getDesktop();
if(file.exists()) //checks file exists or not
desktop.open(file); //opens the specified file
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
当我们运行上述程序时, 它将在默认文本编辑器中打开指定的文本文件。我们还可以打开.docx, .pdf和.jpg文件。
输出:
Java FileInputStream类
Java FileInputStream类用于打开和读取文件。我们可以使用FileInputStream类的构造函数打开和读取文件。构造函数的签名是:
public FileInputStream(File file) throws FileNotFoundException
它接受文件作为参数。如果文件不存在或文件名是目录, 则抛出FileNotFoundException。
例
import java.io.*;
import java.util.Scanner;
public class OpenFileExample2
{
public static void main(String args[])
{
try
{
//constructor of file class having file as argument
File file=new File("C:\\demo\\demofile.txt");
FileInputStream fis=new FileInputStream(file); //opens a connection to an actual file
System.out.println("file content: ");
int r=0;
while((r=fis.read())!=-1)
{
System.out.print((char)r); //prints the content of the file
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
Java BufferedReader类
Java BufferedReader类从字符输入流读取文本。它属于java.io包。我们使用BufferedReader类的构造函数来打开或读取文件。构造函数的签名是:
public BufferedReader(Reader in)
它创建一个使用默认大小的输入缓冲区的缓冲字符输入流。它使用默认大小的输入缓冲区。
例
import java.io.*;
import java.util.Scanner;
public class OpenFileExample3
{
public static void main(String args[])
{
try
{
//constructor of File class having file as argument
File file=new File("C:\\demo\\demofile.txt");
//creates a buffer reader input stream
BufferedReader br=new BufferedReader(new FileReader(file));
System.out.println("file content: ");
int r=0;
while((r=br.read())!=-1)
{
System.out.print((char)r);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
Java FileReader类
Java FileReader类也用于打开和读取文件。它属于java.io包。这是读取文件字符的便利。它用于使用FileInputStream类读取原始字节。我们使用FileInputStream类的构造函数来打开和读取文件。构造函数的签名是:
public FileReader(File file) throws FileNotFoundException
它接受文件作为参数。如果指定的文件不存在或文件名是目录, 则抛出FileNotFoundException。
例
import java.io.*;
public class OpenFileExample4
{
public static void main(String args[])
{
try
{
//constructor of the File class having file as an argument
FileReader fr=new FileReader("C:\\demo\\demofile.txt");
System.out.println("file content: ");
int r=0;
while((r=fr.read())!=-1)
{
System.out.print((char)r); //prints the content of the file
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
Java Scanner类
Java Scanner类也用于打开和读取文件。 Scanner类属于java.util包。 Scanner类的构造函数用于打开和读取文件。构造函数的签名是:
public scanner (File source) throws FileNotFoundException
它接受文件(要扫描)作为参数。如果找不到文件源, 它也会引发FileNotFoundException。
例
import java.io.File;
import java.util.Scanner;
public class OpenFileExample5
{
public static void main(String[] args)
{
try
{
File file=new File("C:\\demo\\demofile.txt");
Scanner sc = new Scanner(file); //file to be scanned
while (sc.hasNextLine()) //returns true if and only if scanner has another token
System.out.println(sc.nextLine());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
输出:
Java Nio软件包
readAllLines()方法:readAllLines()方法是File类的方法。它从文件读取所有行, 并使用UTF-8字符集将文件中的字节解码为字符。它将文件中的行作为列表返回。该方法的签名是:
public static List<String> readAllLines(Path path) throws IOException
其中path是文件路径。
上面的方法等效于调用以下方法:
File.readAllLines(path, Standard CharSets.UTF_8)
Collections.emptyList():emptyList()方法是属于java.util包的Collection类的方法。它用于获取一个空列表。该方法的签名是:
public static final <T> List <T> emptyList()
例
import java.util.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.io.*;
public class OpenFileExample6
{
public static List<String> readFileInList(String fileName)
{
List<String> lines = Collections.emptyList();
try
{
lines=Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
}
catch (IOException e)
{
e.printStackTrace();
}
return lines;
}
public static void main(String[] args)
{
List l = readFileInList("C:\\demo\\demofile.txt");
Iterator<String> itr = l.iterator(); //access the elements
while (itr.hasNext()) //returns true if and only if scanner has another token
System.out.println(itr.next()); //prints the content of the file
}
}
输出:
评论前必须登录!
注册