BeginnersBook Java IO 教程(一)
如何在 Java 中创建文件
原文: https://beginnersbook.com/2014/01/how-to-create-a-file-in-java/
在本教程中,我们将了解如何使用createNewFile()
方法在 Java 中创建文件。如果文件在指定位置不存在并且返回true
,则此方法创建一个空文件。如果文件已存在,则此方法返回false
。它抛出:
IOException
- 如果在创建文件期间发生输入/输出错误。
SecurityException
- 如果存在安全管理器且其SecurityManager.checkWrite(java.lang.String)
方法拒绝对该文件的写访问。
完整代码:
下面的代码将在 C 盘中创建一个名为newfile.txt
的txt
文件。您可以更改以下代码中的路径,以便在不同目录或不同驱动器中创建文件。
package beginnersbook.com;
import java.io.File;
import java.io.IOException;
public class CreateFileDemo
{
public static void main( String[] args )
{
try {
File file = new File("C:\\newfile.txt");
/*If file gets created then the createNewFile()
* method would return true or if the file is
* already present it would return false
*/
boolean fvar = file.createNewFile();
if (fvar){
System.out.println("File has been created successfully");
}
else{
System.out.println("File already present at the specified location");
}
} catch (IOException e) {
System.out.println("Exception Occurred:");
e.printStackTrace();
}
}
}
参考:
如何在 Java 中读取文件 - BufferedInputStream
原文: https://beginnersbook.com/2014/01/how-to-read-file-in-java-bufferedinputstream/
在这个例子中,我们将看到如何使用FileInputStream
和BufferedInputStream
在 Java 中读取文件。以下是我们在下面的代码中采取的详细步骤:
1)通过在创建文件对象期间提供文件的完整路径(我们将读取)来创建File
实例。
2)将文件实例传递给FileInputStream
,它打开与实际文件的连接,该文件由文件系统中的File
对象文件命名。
3)将FileInputStream
实例传递给BufferedInputStream
,它创建BufferedInputStream
并保存其参数,即输入流,供以后使用。创建内部缓冲区数组并将其存储在buf
中,使用该数组,读取操作可提供良好的性能,因为内容在缓冲区中很容易获得。
4)用于循环读取文件。方法available()
用于检查文件的结尾,因为当指针到达文件末尾时返回 0。使用FileInputStream
的read()
方法读取文件内容。
package beginnersbook.com;
import java.io.*;
public class ReadFileDemo {
public static void main(String[] args) {
//Specify the path of the file here
File file = new File("C://myfile.txt");
BufferedInputStream bis = null;
FileInputStream fis= null;
try
{
//FileInputStream to read the file
fis = new FileInputStream(file);
/*Passed the FileInputStream to BufferedInputStream
*For Fast read using the buffer array.*/
bis = new BufferedInputStream(fis);
/*available() method of BufferedInputStream
* returns 0 when there are no more bytes
* present in the file to be read*/
while( bis.available() > 0 ){
System.out.print((char)bis.read());
}
}catch(FileNotFoundException fnfe)
{
System.out.println("The specified file not found" + fnfe);
}
catch(IOException ioe)
{
System.out.println("I/O Exception: " + ioe);
}
finally
{
try{
if(bis != null && fis!=null)
{
fis.close();
bis.close();
}
}catch(IOException ioe)
{
System.out.println("Error in InputStream close(): " + ioe);
}
}
}
}
如何在 java 中使用FileOutputStream
写入文件
原文: https://beginnersbook.com/2014/01/how-to-write-to-a-file-in-java-using-fileoutputstream/
之前我们看过如何在 Java 中创建一个文件。在本教程中,我们将看到如何使用FileOutputStream
在 java 中写入文件。我们将使用FileOutputStream
的write()
方法将内容写入指定的文件。这是write()
方法的签名。
public void write(byte[] b) throws IOException
它将指定字节数组中的b.length
字节写入此文件输出流。如您所见,此方法需要字节数组才能将它们写入文件。因此,在将内容写入文件之前,我们需要将内容转换为字节数组。
完整代码:写入文件
在下面的例子中,我们将String
写入文件。要将String
转换为字节数组,我们使用String
类的getBytes()
方法。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteFileDemo {
public static void main(String[] args) {
FileOutputStream fos = null;
File file;
String mycontent = "This is my Data which needs" +
" to be written into the file";
try {
//Specify the file path here
file = new File("C:/myfile.txt");
fos = new FileOutputStream(file);
/* This logic will check whether the file
* exists or not. If the file is not found
* at the specified location it would create
* a new file*/
if (!file.exists()) {
file.createNewFile();
}
/*String content cannot be directly written into
* a file. It needs to be converted into bytes
*/
byte[] bytesArray = mycontent.getBytes();
fos.write(bytesArray);
fos.flush();
System.out.println("File Written Successfully");
}
catch (IOException ioe) {
ioe.printStackTrace();
}
finally {
try {
if (fos != null)
{
fos.close();
}
}
catch (IOException ioe) {
System.out.println("Error in closing the Stream");
}
}
}
}
输出:
File Written Successfully
参考:
使用BufferedWriter
,PrintWriter
,FileWriter
附加到 java 中的文件
原文: https://beginnersbook.com/2014/01/how-to-append-to-a-file-in-java/
在本教程中,我们将学习如何使用 Java 将内容附加到文件中。有两种方法可以追加:
1)使用FileWriter
和BufferedWriter
:在这种方法中,我们将在一个或多个字符串中包含内容,我们将把这些字符串附加到文件中。该文件可以单独使用FileWriter
附加,但使用BufferedWriter
可以在维护缓冲区时提高性能。
2)使用PrintWriter
:这是将内容附加到文件的最佳方式之一。无论你使用PrintWriter
对象写什么都会附加到文件中。
1)使用FileWriter
和BufferedWriter
将内容附加到File
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
class AppendFileDemo
{
public static void main( String[] args )
{
try{
String content = "This is my content which would be appended " +
"at the end of the specified file";
//Specify the file name and path here
File file =new File("C://myfile.txt");
/* This logic is to create the file if the
* file is not already present
*/
if(!file.exists()){
file.createNewFile();
}
//Here true is to append the content to file
FileWriter fw = new FileWriter(file,true);
//BufferedWriter writer give better performance
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
//Closing BufferedWriter Stream
bw.close();
System.out.println("Data successfully appended at the end of file");
}catch(IOException ioe){
System.out.println("Exception occurred:");
ioe.printStackTrace();
}
}
}
输出:
Data successfully appended at the end of file
让我们说myfile.txt
的内容是:
This is the already present content of my file
运行上述程序后,内容将是:
This is the already present content of my fileThis is my content which
would be appended at the end of the specified file
2)使用PrintWriter
将内容附加到File
PrintWriter
为您提供更大的灵活性。使用此功能,您可以轻松格式化要附加到File
的内容。
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.IOException;
class AppendFileDemo2
{
public static void main( String[] args )
{
try{
File file =new File("C://myfile.txt");
if(!file.exists()){
file.createNewFile();
}
FileWriter fw = new FileWriter(file,true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
//This will add a new line to the file content
pw.println("");
/* Below three statements would add three
* mentioned Strings to the file in new lines.
*/
pw.println("This is first line");
pw.println("This is the second line");
pw.println("This is third line");
pw.close();
System.out.println("Data successfully appended at the end of file");
}catch(IOException ioe){
System.out.println("Exception occurred:");
ioe.printStackTrace();
}
}
}
输出:
Data successfully appended at the end of file
让我们说myfile.txt
的内容是:
This is the already present content of my file
运行上述程序后,内容将是:
This is the already present content of my file
This is first line
This is the second line
This is third line
参考:
如何在 Java 中删除文件 - delete()
方法
原文: https://beginnersbook.com/2014/01/how-to-delete-file-in-java-delete-method/
在本教程中,我们将看到如何在 java 中删除文件。我们将使用delete()
方法删除文件。
public boolean delete()
如果指定的File
成功删除,则此方法返回true
,否则返回false
。
这是完整的代码:
import java.io.File;
public class DeleteFileJavaDemo
{
public static void main(String[] args)
{
try{
//Specify the file name and path
File file = new File("C:\\myfile.txt");
/*the delete() method returns true if the file is
* deleted successfully else it returns false
*/
if(file.delete()){
System.out.println(file.getName() + " is deleted!");
}else{
System.out.println("Delete failed: File didn't delete");
}
}catch(Exception e){
System.out.println("Exception occurred");
e.printStackTrace();
}
}
}
输出:
myfile.txt is deleted!
参考:
如何以 GZIP 格式压缩文件
原文: https://beginnersbook.com/2014/07/how-to-compress-a-file-in-gzip-format/
以下代码将指定的文件压缩为 GZip 格式。在下面的示例中,我们在B
驱动器的Java
文件夹下中有一个文本文件,我们正在压缩并生成同一文件夹中的 GZip 文件。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class GZipExample
{
public static void main( String[] args )
{
GZipExample zipObj = new GZipExample();
zipObj.gzipMyFile();
}
public void gzipMyFile(){
byte[] buffer = new byte[1024];
try{
//Specify Name and Path of Output GZip file here
GZIPOutputStream gos =
new GZIPOutputStream(new FileOutputStream("B://Java/Myfile.gz"));
//Specify location of Input file here
FileInputStream fis =
new FileInputStream("B://Java/Myfile.txt");
//Reading from input file and writing to output GZip file
int length;
while ((length = fis.read(buffer)) > 0) {
/* public void write(byte[] buf, int off, int len):
* Writes array of bytes to the compressed output stream.
* This method will block until all the bytes are written.
* Parameters:
* buf - the data to be written
* off - the start offset of the data
* len - the length of the data
*/
gos.write(buffer, 0, length);
}
fis.close();
/* public void finish(): Finishes writing compressed
* data to the output stream without closing the
* underlying stream.
*/
gos.finish();
gos.close();
System.out.println("File Compressed!!");
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
输出:
File Compressed!!
参考:
如何使用 Java 将文件复制到另一个文件
原文: https://beginnersbook.com/2014/05/how-to-copy-a-file-to-another-file-in-java/
在本教程中,我们将了解如何将一个文件的内容复制到 java 中的另一个文件中。为了复制文件,首先我们可以使用FileInputStream
读取文件然后我们可以使用FileOutputStream
将读取的内容写入输出文件。
例
下面的代码会将MyInputFile.txt
的内容复制到MyOutputFile.txt
文件中。如果MyOutputFile.txt
不存在,则程序将首先创建文件,然后复制内容。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyExample
{
public static void main(String[] args)
{
FileInputStream instream = null;
FileOutputStream outstream = null;
try{
File infile =new File("C:\\MyInputFile.txt");
File outfile =new File("C:\\MyOutputFile.txt");
instream = new FileInputStream(infile);
outstream = new FileOutputStream(outfile);
byte[] buffer = new byte[1024];
int length;
/*copying the contents from input stream to
* output stream using read and write methods
*/
while ((length = instream.read(buffer)) > 0){
outstream.write(buffer, 0, length);
}
//Closing the input/output file streams
instream.close();
outstream.close();
System.out.println("File copied successfully!!");
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
输出:
File copied successfully!!
上述程序中使用的方法是:
read()
方法
public int read(byte[] b) throws IOException
将此输入流中的b.length
个字节数据读入一个字节数组。此方法将阻止,直到某些输入可用。它返回读入缓冲区的总字节数,如果没有更多数据,则返回 -1,因为已到达文件末尾。为了使这个方法在我们的程序中工作,我们创建了一个字节数组buffer
并将输入文件的内容读取到相同的内容。由于此方法抛出IOException
,因此我们将“读取文件”代码放在try-catch
块中以处理异常。
write()
方法
public void write(byte[] b,
int off,
int length)
throws IOException
将从偏移off
开始的指定字节数组的长度字节写入此文件输出流。
调整:
如果输入和输出文件不在同一个驱动器中,则可以在创建文件对象时指定驱动器。例如,如果您的输入文件在C
盘中并且输出文件在D
盘中,那么您可以创建如下文件对象:
File infile =new File("C:\\MyInputFile.txt");
File outfile =new File("D:\\MyOutputFile.txt");
如何在 java 中获取文件的最后修改日期
原文: https://beginnersbook.com/2014/05/how-to-get-the-last-modified-date-of-a-file-in-java/
在这里,我们将学习如何在 java 中获取文件的最后修改日期。为了做到这一点,我们可以使用File
类的lastModified()
方法。以下是此方法的签名。
public long lastModified()
它返回上次修改此抽象路径名表示的文件的时间。此方法返回的值以毫秒为单位,因此为了使其可读,我们可以使用SimpleDateFormat
格式化输出。
完整代码:
这里我们获取文件Myfile.txt
的最后修改日期,该日期存在于驱动器C
中。由于方法返回的值不可读,我们使用SimpleDateFormat
类的format()
方法对其进行格式化。
import java.io.File;
import java.text.SimpleDateFormat;
public class LastModifiedDateExample
{
public static void main(String[] args)
{
//Specify the file path and name
File file = new File("C:\\Myfile.txt");
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
System.out.println("Last Modified Date: " + sdf.format(file.lastModified()));
}
}
输出:
Last Modified Date: 01/03/2014 22:41:49
我们可以以任何所需的格式格式化和显示输出。例如,如果我们使用以下模式:
SimpleDateFormat sdf2 = new SimpleDateFormat("MM-dd-yy HH:mm a");
System.out.println("Last Modified Date: " + sdf2.format(file.lastModified()));
我们将获得以上输出以上模式:
Last Modified Date: 01-03-14 22:41 PM
您可以使用其他几种模式来获得所需形式的输出。要阅读有关日期格式的更多信息,请参阅SimpleDateFormat
javadoc。
如何在 Java 中创建只读文件
原文: https://beginnersbook.com/2014/05/how-to-make-a-file-read-only-in-java/
在 java 中,使文件只读是非常容易的。在本教程中,我们将学习以下三点。
1)如何使文件只读
2)如何检查现有文件是否处于只读模式
3)如何在 java 中创建可写的只读文件。
1)将文件属性更改为只读
要使文件只读,我们可以使用File
类的setReadOnly()
方法。它返回一个布尔值,我们可以进一步验证操作是否成功,就像我在下面的程序中一样。正如您在下面的程序中看到的那样,我将文件属性更改为只读取我的计算机“C 盘”中存在的文件Myfile.txt
。
import java.io.File;
import java.io.IOException;
public class ReadOnlyChangeExample
{
public static void main(String[] args) throws IOException
{
File myfile = new File("C://Myfile.txt");
//making the file read only
boolean flag = myfile.setReadOnly();
if (flag==true)
{
System.out.println("File successfully converted to Read only mode!!");
}
else
{
System.out.println("Unsuccessful Operation!!");
}
}
}
输出:
File successfully converted to Read only mode!!
2)检查文件是可写还是只读
为了检查文件属性,我们可以使用文件类的canWrite()
方法。如果文件是可写的,则此方法返回true
,否则返回false
。当我在已经设置为仅在之前的程序中读取的文件Myfile.txt
上执行操作时,我将输出为"File is read only"
。
import java.io.File;
import java.io.IOException;
public class CheckAttributes
{
public static void main(String[] args) throws IOException
{
File myfile = new File("C://Myfile.txt");
if (myfile.canWrite())
{
System.out.println("File is writable.");
}
else
{
System.out.println("File is read only.");
}
}
}
输出:
File is read only.
3)如何在 java 中创建可写的只读文件
要将只读文件设置为可写文件,我们可以使用setWritable()
方法。此方法也可用于使文件只读。
file.setWritable(true)
:使文件可写。
file.setWritable(false)
:使文件只读。
import java.io.File;
import java.io.IOException;
public class MakeWritable
{
public static void main(String[] args) throws IOException
{
File myfile = new File("C://Myfile.txt");
//changing the file mode to writable
myfile.setWritable(true);
if (myfile.canWrite())
{
System.out.println("File is writable.");
}
else
{
System.out.println("File is read only.");
}
}
}
输出:
File is writable.
参考:
如何在 Java 中检查文件是否隐藏
原文: https://beginnersbook.com/2015/01/how-to-check-if-a-file-is-hidden-in-java/
在本教程中,我们将学习如何编写程序来检查特定文件是否被隐藏。我们将使用File
类的isHidden()
方法来执行此检查。此方法返回布尔值(true
或false
),如果文件被隐藏,则此方法返回true
,否则返回false
值。
这是完整的代码:
import java.io.File;
import java.io.IOException;
public class HiddenPropertyCheck
{
public static void main(String[] args) throws IOException, SecurityException
{
// Provide the complete file path here
File file = new File("c:/myfile.txt");
if(file.isHidden()){
System.out.println("The specified file is hidden");
}else{
System.out.println("The specified file is not hidden");
}
}
}
关于 javadoc 的isHidden()
方法的更多细节:
public static boolean isHidden(Path path) throws IOException
判断文件是否被视为隐藏。隐藏的确切定义是平台或提供者依赖。例如,在 UNIX 上,如果文件的名称以句点字符('.'
)开头,则认为该文件是隐藏的。在 Windows 上,如果文件不是目录并且设置了 DOS 隐藏属性,则该文件被视为隐藏。
根据实现方式,此方法可能需要访问文件系统以确定文件是否被视为隐藏。
参数:
path
- 要测试的文件的路径
返回:
如果文件被视为隐藏,则返回true
抛出:
IOException
- 如果发生 I/O 错误
SecurityException
- 如果是默认提供程序,并且安装了安全管理器,则调用checkRead
方法以检查对文件。