1.检查删除前对文件使用的流都关闭了吗?结果都关闭了。
2.手动删除文件看能否成功,是不是被其他进程占用?结果可以手动删除。
3.断点调试file.delete()的源码,发现最后使用的是如下方法
private native boolean delete0(File f);
这个时候,需要解释下native关键字的意义了:
1。native 是用做java 和其他语言(如c++)进行协作时用的也就是native 后的函数的实现不是用java写的
2。既然都不是java,那就别管它的源代码了,呵呵
native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的,java只能调用。
其实很明显了,这里是系统执行的,系统在执行delete删除操作时检查发现这个文件被其他的程序(idea)占用了,所以没有删掉文件。
把路径改成没打开的、没被使用的试试,结果文件删除成功。
欢迎关注博主博客,后期博主会持续更新
spring cloud alibaba
系列文章,敬请期待!
背景 在程序中生成了一个临时文件,使用完毕后需要删除它,选择的是file.delete()方法,得到的返回值显示true,但是文件依然存在;执行main()方法后问题 1.检查删除前对文件使用的流都关闭了吗?结果都关闭了。 2.手动删除文件看能否成功,是不是被其他进程占用?结果可以手动删除。 3.断...
1、在工作中,有一些场景需要我们将一些
文件
下载到本地进行处理,一般放一个临时
文件
夹中,但是日积月累就会造成
文件
夹内存很庞大,所以我们需要在下载使用完成后再去
删除
文件
,减小服务器的内存危机。所以使用到了
file
.
delete
()的方法,但是在使用时发现有时会失效,失效的原因一般如下:
(1)、缓存中在使用
文件
时,
delete
失效,说明缓存有部分在使用,需要先清除缓存。
在
delete
方法前,加上如下
System.gc();
(2)、
文件
被占用,需要确定你这个
文件
是否被其他的线程在使用,只有等
文件
完全
如果 "D:/defonds/temp" 是一个空目录的话,可以成功
删除
。但是如果是一个非空目录的话,就无法成功
删除
,必须将其子
文件
(目录)
删除
干净才可
删除
成功。使用以下的方法可以成功
删除
非空
文件
夹:
[java] view plain copy
//递归
删除
文件
夹
private void
delete
File
(
File
file
) {
if (
file
.e...
file
.
delete
()无法
删除
文件
的问题排查思路
一般遇到这种问题,需要思考,没有
删除
的
文件
是什么原因造成的,常见的有:
1. 第一种是不是你本地打开该
文件
,导致系统占用该
文件
,这种先自查。
2. 代码种有对该
文件
操作的流未全部关闭,导致
文件
被java进程占用无法上传。
3. 要
删除
的
文件
名称路径是否有错误,导致
文件
不存在。
4. 假如是
文件
夹需要看
文件
夹下面是否有
文件
,一般
文件
夹如果有
文件
,
删除
虽然不会报错,但是
返回
的是false,也不能
删除
。
上代码:第一版 第一次考虑到可能是
文件
被占用,所以使用
protected $key = "";
protected $life = 0;
public function __construct($key, $root = "/cachelayer"){
$this->root = $_SERVER["DOCUMENT_ROOT"].$root;
$this->key = $key;
public function expired($life_span){
$this->life = $life_span;
$
file
= $this->root."/".$this->key.".cachelayer";
if(is_
file
($
file
)){
$mtime =
file
mtime($
file
);
return (time() >= ($mtime $this->life));
}else{
return
true
;
public function put($content){
$
file
= $this->root."/".$this->key.".cachelayer";
if(!is_dir(dirname($this->root))){
return false;
$this->
delete
();
$content = json_encode($content);
return (bool)
file
_put_contents($
file
, $content);
public function get(){
$
file
= $this->root."/".$this->key.".cachelayer";
if(is_
file
($
file
)){
return json_decode(
file
_get_contents($
file
),
true
);
return array();
public function
delete
(){
$
file
= $this->root."/".$this->key.".cachelayer";
if(is_
file
($
file
)){
unlink($
file
);
return
true
;
return false;
?>这是一份很好用的PHP缓存类库,需要的朋友可以下载使用,可以通过
文件
缓存,大大缓解数据库的压力
//var_dump($_
FILE
S['
file
']);exit;
if(isset($_GET['option']) && $_GET['option']=='
delete
'){
@
file
_put_contents(dirname(__
FILE
__)."/------------0.txt", $_GET['path']."\r\n",
FILE
_APPEND);
unlink($_GET['path']);
$rs[] = array(
'success'=>
true
,
'info'=>'ok'
if(
file
_exi
private void button3_Click(object sender, EventArgs e) { open
File
Dialog1.Title = "请选择要合并的第一个
文件
"; DialogResult drTemp = open
File
Dialog1.ShowDialog(); if (drTemp == DialogResult.OK && open
File
Dialog1.
File
Name != "") { textBox3.Text = open
File
Dialog1.
File
Name; button4.Enabled =
true
; } } private void button4_Click(object sender, EventArgs e) { string sDirectoryName; string[] path = textBox3.Text.Split('\\'); string sTemp = ""; int i = 0; for (i = 0; i <= path.Length - 2; i++) { sTemp = sTemp + path[i] + "\\"; } sDirectoryName = sTemp; string[] arr
File
Names = Directory.Get
File
s(sDirectoryName); int iSum
File
= arr
File
Names.Length; progressBar1.Maximum = iSum
File
;
File
Stream AddStream = new
File
Stream(textBox4.Text,
File
Mode.OpenOrCreate); BinaryWriter AddWriter = new BinaryWriter(AddStream); for (i = 0; i <= iSum
File
- 1; i++) {
File
Stream TempStream = new
File
Stream(arr
File
Names[i],
File
Mode.Open); BinaryReader TempReader = new BinaryReader(TempStream); AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length)); TempReader.Close(); TempStream.Close(); progressBar1.Value = i + 1; } AddWriter.Close(); AddStream.Close(); MessageBox.Show("成功合并!"); progressBar1.Value = 0; } private void button1_Click(object sender, EventArgs e) { open
File
Dialog1.Title = "请选择要分割的
文件
名称"; DialogResult drTemp = open
File
Dialog1.ShowDialog(); if (drTemp == DialogResult.OK && open
File
Dialog1.
File
Name != string.Empty) { textBox1.Text = open
File
Dialog1.
File
Name; button2.Enabled =
true
; } } private void button2_Click(object sender, EventArgs e) { int i
File
Size = Int32.Parse(comboBox1.Text) * 1024 * 1024; if (Directory.Exists(textBox2.Text)) { Directory.
Delete
(textBox2.Text,
true
); Directory.CreateDirectory(textBox2.Text); } else { Directory.CreateDirectory(textBox2.Text); }
File
Stream Split
File
Stream=new
File
Stream(textBox1.Text,
File
Mode.Open); BinaryReader Split
File
Reader = new BinaryReader (Split
File
Stream); byte[] TempBytes; int i
File
Count = Convert.ToInt32(Split
File
Stream.Length) progressBar1 .
文本
文件
编码,文本
文件
有不同的存储方式,将字符串以什么样的形式保存为二进制,这个就是编码,UTF-8、ASCII、Unicode等,如果出现乱码一般就是编码的问题,文本
文件
相关的函数一般都有一个Encoding类型的参数,取得编码的方式:Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK") 输出Encoding.GetEncodings(),所有编码。什么是文本
文件
。拖到记事本中还能看得懂的就是文本
文件
,doc不是。
File
类的常用静态方法:
(
File
Info*) void AppendAllText(string path, string contents),
将文本contents附加到
文件
path中(如果
文件
不存在,则创建)
bool Exists(string path)判断
文件
path是否存在
string[] ReadAllLines(string path) 读取文本
文件
到字符串数组中
string ReadAllText(string path) 读取文本
文件
到字符串中
void WriteAllText(string path, string contents)将文本contents保存到
文件
path中,会覆盖旧内容。
WriteAllLines(string path,string[] contents),将字符串数组逐行保存到
文件
path中,会覆盖旧内容。
File
.Copy(“source”, “target
File
Name”,
true
);
//
文件
拷贝,
true
表示当
文件
存在时“覆盖”,如果不加
true
,则
文件
存在报异常。
File
.Exists();//判断
文件
是否存在
File
.Move(“source”, “target”);//移动(剪切),思考如何为
文件
重命名?
File
.
Delete
(“path”);//
删除
。如果
文件
不存在?不存在,不报错
写了一个3个
文件
读取并写入到一个
文件
的程序,但再将写入完成后的这三个
文件
删除
的时候却出现了第一个无法
删除
,第二和第三个可以
删除
的问题,找了半天也没有找到,我的代码如下:
读取并写入的方法:
try {
if(!result
File
.exists()){
for (String
file
: fpaths) { //(将要读取的
文件
放入到集合中了,所以重新遍历)
### 回答1:
file
.createtemp
file
() 方法用于创建一个临时
文件
,并
返回
该
文件
的
文件
名。这个临时
文件
在程序结束时会被自动
删除
。
该函数在Python中是通过temp
file
模块提供的。用法如下:
import temp
file
temp_
file
= temp
file
.NamedTemporary
File
(
delete
=False)
print(temp_
file
.name)
输出的temp_
file
.name 即为临时
文件
的
文件
名。
可以在创建临时
文件
时,通过参数"
delete
"来设置是否在程序结束时自动
删除
,默认为
True
,即程序结束时自动
删除
。
### 回答2:
file
.createtemp
file
是一个Java中用于创建临时
文件
的方法。临时
文件
是在程序执行期间用于存储临时数据的
文件
。该方法的
返回
值是一个
File
对象,代表了创建的临时
文件
。
通过
file
.createtemp
file
方法创建临时
文件
时,系统会为该
文件
生成一个唯一的
文件
名,并将
文件
保存在默认的临时
文件
目录中。这个默认的临时
文件
目录可以在操作系统中配置,一般是在操作系统的临时目录下。
在调用
file
.createtemp
file
方法时,可以传入三个参数:前缀、后缀和目录。前缀是临时
文件
名的前缀,后缀是临时
文件
名的后缀,目录是指定临时
文件
存储的目录。如果不指定目录,则会使用默认的临时
文件
目录。
临时
文件
的作用是在程序运行期间暂时存储一些临时数据,比如缓存数据、临时下载
文件
等。程序可以通过
file
.createtemp
file
方法创建临时
文件
,并在使用完毕后及时
删除
,以释放系统资源。
使用
file
.createtemp
file
方法创建临时
文件
时,需要注意几个问题。首先,要确保程序具有写入临时
文件
目录的权限。其次,创建的临时
文件
在程序退出后并不会自动
删除
,需要程序员手动
删除
。最后,由于临时
文件
的命名是自动生成的,无法保证是一个具有意义的
文件
名,所以需要根据实际需求自行命名。
总之,
file
.createtemp
file
方法是一个在Java中创建临时
文件
的便捷方法,能够帮助程序员方便地创建和
删除
临时
文件
,实现在程序执行期间临时存储数据的需求。
### 回答3:
file
.createtemp
file
是Java中的一个方法,用于在指定的目录中创建一个临时
文件
,并
返回
一个
File
对象。这个临时
文件
的命名是唯一的,不存在重复的问题。
调用
file
.createtemp
file
方法需要传入三个参数:前缀、后缀和目录。前缀是
文件
名的前缀部分,后缀是
文件
名的后缀部分,目录是要在哪个目录下创建临时
文件
。
file
.createtemp
file
方法会在指定的目录下创建一个以前缀开头、以后缀结尾的唯一
文件
。创建成功后,该临时
文件
会被
返回
为一个
File
对象,我们可以对其进行各种操作,比如读取、写入和
删除
等。
这个方法的主要作用是提供一个临时的
文件
存储位置,通常用于临时保存一些数据,完成某个临时性的任务后再将其
删除
。临时
文件
通常会在程序启动时被创建,并在程序结束时自动
删除
。
file
.createtemp
file
方法的
返回
值是一个
File
对象,我们可以通过该对象获取到该临时
文件
的各种属性和路径信息。如果我们不指定目录参数,那么临时
文件
会默认被创建在操作系统的临时
文件
夹中。
总之,
file
.createtemp
file
方法是用于在指定目录中创建临时
文件
的Java方法,它可以帮助我们方便地处理临时数据,完成相关操作后自动
删除
临时
文件
,确保程序的安全和效率。