我想删除ABC目录中的所有文件.
当我尝试使用FileUtils.deleteDirectory(new File("C:/test/ABC/"));它时也删除文件夹ABC.
有一个单线解决方案,我可以删除目录内的文件,但不删除目录?
这是代码
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));
try {
bw.write("test");
} finally {
IOUtils.closeQuietly(bw);
}
Run Code Online (Sandbox Code Playgroud)
安全与否?据我所知,当我们关闭BufferedWriter时,它会将其缓冲区刷新到底层流,并可能因错误而失败.但IOUtils.closeQuietly API表示将忽略任何异常.
由于IOUtils.closeQuietly,数据丢失是否有可能被忽视?
Commons-IO有一个IOUtils.toString(inputStream)方法,可以读取输入流中的所有内容:
InputStream input = getInputStream();
String content = IOUtils.toString(input);
Run Code Online (Sandbox Code Playgroud)
我的问题是我在使用后手动关闭输入流吗?
我以为IOUtils可能会关闭它,因为它已经阅读了所有内容,但我在源代码中找不到它.
有没有方法从文本文件中读取特定的行?在API或Apache Commons中.就像是 :
String readLine(File file, int lineNumber)
Run Code Online (Sandbox Code Playgroud)
我同意它的实现是微不足道的,但如果文件非常大,它的效率并不高.
我想收集目录下所有文件的列表,特别是包括子目录.我不喜欢自己做事,所以我使用的FileUtils.listFiles是Apache Commons IO.所以我有类似的东西:
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
public class TestListFiles {
public static void main(String[] args) {
Collection<File> found = FileUtils.listFiles(new File("foo"),
TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (File f : found) {
System.out.println("Found file: " + f);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,这似乎只能找到普通文件,而不是目录:
$ mkdir -p foo/bar/baz; touch foo/one_file
$ java -classpath commons-io-1.4.jar:. TestListFiles
Found file: foo/one_file
Run Code Online (Sandbox Code Playgroud)
我已经传递TrueFileFilter给两个滤镜了,所以我想不出更具包容性的东西.我希望它列出:( "foo", "foo/one_file", "foo/bar", "foo/bar/baz"以任何顺序).
我也会接受非FileUtils解决方案,但是我必须编写自己的BFS,甚至从我所获得的列表中收集父目录集似乎很愚蠢.(无论如何,这将错过空子目录.)这是在Linux,FWIW.
我正在研究一个读取/var/log/auth.log文件的监控程序.我正在使用Apache Commons IO Tailer类来实时读取文件.首先,我想在一个简单的文件上测试实时阅读部分,并在控制台行中手动输入一些代码.这是我的代码:
public class Main {
public static void main(String[] args) {
TailerListener listener = new MyListener();
Tailer tailer = Tailer.create(new File("log.txt"), listener, 500);
while(true) {
}
}
}
public class MyListener extends TailerListenerAdapter {
@Override
public void handle(String line) {
System.out.println(line);
}
}
Run Code Online (Sandbox Code Playgroud)
从终端:sudo echo "Hello" >> log.txt
问题是当我尝试在文件中手动编写某些东西时,它不会在控制台中打印它.我试图找到一个使用Tailer类的具体例子,但没有运气.我在这做错了什么?
如何使用库下载文件并打印保存的字节?我试过用
import static org.apache.commons.io.FileUtils.copyURLToFile;
public static void Download() {
URL dl = null;
File fl = null;
try {
fl = new File(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip");
dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip");
copyURLToFile(dl, fl);
} catch (Exception e) {
System.out.println(e);
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法显示字节或进度条.我应该使用哪种方法?
public class download {
public static void Download() {
URL dl = null;
File fl = null;
String x = null;
try {
fl = new File(System.getProperty("user.home").replace("\\", "/") + "/Desktop/Screenshots.zip");
dl = new URL("http://ds-forums.com/kyle-tests/uploads/Screenshots.zip");
OutputStream os = new FileOutputStream(fl); …Run Code Online (Sandbox Code Playgroud) 我有一个Android项目(Gradle),我需要包含Joda Time和Commons IO库.这是我的Gradle文件:
apply plugin: 'android-library'
apply plugin: 'android-test'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
classpath 'org.robolectric.gradle:gradle-android-test-plugin:0.10.+'
}
}
dependencies {
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
androidTestCompile 'com.google.guava:guava:14.0.1',
'com.squareup.dagger:dagger:1.1.0',
'org.hamcrest:hamcrest-integration:1.1',
'org.hamcrest:hamcrest-core:1.1',
'org.hamcrest:hamcrest-library:1.1'
androidTestCompile('junit:junit:4.11') {
exclude module: 'hamcrest-core'
}
androidTestCompile 'org.mockito:mockito-all:1.9.5'
androidTestCompile('org.robolectric:robolectric:2.3') {
exclude module: 'classworlds'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-plugin-registry'
exclude module: 'maven-profile'
exclude module: 'maven-project'
exclude module: …Run Code Online (Sandbox Code Playgroud) 我通过JNI调用C++方法创建了两个文件.给定目录中的文本日志文件和pdf文件.我想在执行JNI方法之前删除这些文件(如果存在).
我正在使用Apache commons.io(FileUtils.forceDelete(文件文件)).当我执行时,我得到一个IOException:
java.io.IOException: Unable to delete file: D:\Folder\file.log
Run Code Online (Sandbox Code Playgroud)
我在使用File.canWrite()方法触发delete方法之前检查文件的可写状态.它对文件和父目录都返回true.
你知道为什么我在删除文件时遇到问题吗?据我所知,创建文件的C++方法是在方法完成后关闭或解锁它们.无论如何,我无法访问C++代码的源代码,所以我无法检查是否真的如此或修改代码.
谢谢,马可
我有一个相当基本的问题,我试图使用java从这个URL下载PDF:
http://kundservice.svd.se/ui/templates/HttpHandler/PDFTidningen/PDFTidningen.ashx?date=2014-07-27&file=SVD_D_BILAGA_2014-07-27.pdf&mac=92267fcd3c75feff13154ba66870a523&free=True
Run Code Online (Sandbox Code Playgroud)
这是我的代码"非常基本":
public class Main {
private static final String PATH = "C:\\project\\DownloadTest\\src\\main\\resources\\tmp\\";
private static final String FILENAME = "data.pdf";
private static final String SvDPDFURL = "http://kundservice.svd.se/ui/templates/HttpHandler/PDFTidningen/PDFTidningen.ashx?date=2014-07-27&file=SVD_D_BILAGA_2014-07-27.pdf&mac=92267fcd3c75feff13154ba66870a523&free=True";
public static void main(String[] args) throws Exception{
File file = new File(PATH + FILENAME);
URL url = new URL(SvDPDFURL);
FileUtils.copyURLToFile(url, file);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是文件是空的,我做错了什么.