我正在尝试编写一个程序来从文件夹中读取每个文件,在读取文件中的内容后,该文件应该被删除。我可以编写程序来分别从文件夹中读取文件并从文件夹中删除文件,但无法将它们集成到一个程序中。
我在 Windows 中安装了网络驱动器(samba 服务器)。
我在该驱动器中有一个文件,我想在 Java 程序中读取该文件。
在我尝试使用以下方法读取文件之前:
Paths.get(basePath, fileName).toFile()
Run Code Online (Sandbox Code Playgroud)
但由于文件不存在而失败。文件就在那里,路径也很好。
然后我尝试了以下有效的代码:
String path = Paths.get(basePath, fileName).toAbsolutePath().toString()
File file = new File(path)
Run Code Online (Sandbox Code Playgroud)
两种方法有什么区别吗?是否需要任何安全设置?
更新
因此,在我使用第二部分(有效的部分)之后,我回到原来的部分(原样)来验证调试,这次它有效了。我用同一目录中的另一个文件尝试了它,但失败了。看起来很奇怪,但我会检查更多。
java.nio.Files.createSymbolicLink用于创建符号链接。我可以通过 SDK 创建引用链接(类似于cp --reflink=[WHEN]),还是需要执行到底层操作系统?
我几天前在这里发布了同样的问题(Java使用输入流读取外部程序的标准输出),我在阅读时遇到了一些块的优点(while(is.read())!= -1)),但我仍然无法解决问题.
在阅读了这个类似问题的答案后,
Java InputStream阻塞读取 (尤其是Guss发布的答案),
我开始相信,如果程序是交互式的,那么使用is.read()!= -1条件循环输入流是不起作用的(即它需要来自用户的多个输入并在后续输入时显示附加输出,并且只有在给出显式退出命令时,程序才会退出).我承认我对多线程知之甚少,但我认为我需要的是一种在需要用户输入时立即暂停输入流线程(stdout,stderr各一个)的机制,并在输入后恢复提供以防止阻止.以下是我当前的代码,该代码在指示的行上遇到了一个块:
EGMProcess egm = new EGMProcess(new String[]{directory + "/egm", "-o",
"CasinoA", "-v", "VendorA", "-s", "localhost:8080/gls/MessageRobot.action ",
"-E", "glss_env_cert.pem", "-S", "glss_sig_cert.pem", "-C", "glsc_sig_cert.pem",
"-d", "config", "-L", "config/log.txt", "-H", "GLSA-SampleHost"}, new String[]{"PATH=${PATH}"}, directory);
egm.execute();
BufferedReader stdout = new BufferedReader(new InputStreamReader(egm.getInputStream()));
BufferedReader stderr = new BufferedReader(new InputStreamReader(egm.getErrorStream()));
EGMStreamGobbler stdoutprocessor = new EGMStreamGobbler(stdout, egm);
EGMStreamGobbler stderrprocessor = new EGMStreamGobbler(stderr, egm);
BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(egm.getOutputStream()));
stderrprocessor.run(); //<-- the block occurs here!
stdoutprocessor.run();
//EGM/Agent test …
Run Code Online (Sandbox Code Playgroud) 我有一个用户下载的文件,然后我在java中执行一个命令来隐藏文件:
Runtime.getRuntime().exec("attrib +H myFile.txt");
Run Code Online (Sandbox Code Playgroud)
现在我需要访问该隐藏文件,但我得到了
java.io.FileNotFoundException: myFile.txt (Access is denied)
Run Code Online (Sandbox Code Playgroud)
如果文件未被隐藏,则此方法有效,但文件需要隐藏,因此用户不会修改它.那么我该如何修改隐藏文件呢?有没有办法在Java中这样做?
谢谢你的想法.
我有一个包含很多文件的目录.我想删除整个目录以及其中的所有文件.
我希望我的代码等到该目录中的每个文件(包括目录本身)在执行下一个命令之前被删除.
我怎么等 我的代码是
public void wipeMemoryCard()
{
File deleteMatchingFile = new File(Environment
.getExternalStorageDirectory().toString());
try {
filenames = deleteMatchingFile.listFiles();
if (filenames != null && filenames.length > 0)
{
content = true;
for (File tempFile : filenames)
{
if (tempFile.isDirectory())
{
wipeDirectory(tempFile.toString());
tempFile.delete();
}
else
{
File file = new File(tempFile.getAbsolutePath());
file.delete();
}
}
}
else
{
deleteMatchingFile.delete();
Toast("No files to Delete");
}
}
catch (Exception e)
{
e.printStackTrace();
}
if(content == true)
{
if (filenames == null && filenames.length == …Run Code Online (Sandbox Code Playgroud) 我正在编写一个代码我用java nio api创建一个目录,我的代码片段是
Path target = Paths.get(""+folder_path+xx[0]);
Set<PosixFilePermission> perms = null;
if(xx[2].toLowerCase().equals("read"))
perms =PosixFilePermissions.fromString("r--------");
if(xx[2].toLowerCase().equals("read/write"))
{
perms =PosixFilePermissions.fromString("rw-------");
}
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);
Files.createDirectory(target, attr);
Run Code Online (Sandbox Code Playgroud)
但这是一个错误
java.nio.file.FileAlreadyExistsException: /home/ritesh/Desktop/userA
我知道的原因是因为一个目录已经具有相同的名称,但我想用我的代码目录生成的目录覆盖userA目录如何完成这个?
所有流和bufferedReader都需要关闭我的问题是如果流和bufferedReader在一个方法内,参数/参数也需要关闭吗?
示例普通代码:
InputStream i = entity.getContent();
i.close();
Run Code Online (Sandbox Code Playgroud)
问:如果它在一个仅传递的方法的参数内部会怎么样?
public void doDownload(InputStream i, BufferedReader b) {
i.close();
b.close();
}
Run Code Online (Sandbox Code Playgroud)
即使输入流和bufferedreader只是一个参数而没有对象,我也应该关闭它吗?
我正在为在练习中创建的程序编写JUnit。这意味着测试需要涵盖尽可能多的情况,而我对程序中某些内容的实现方式没有任何影响。此外,该程序还会运行一个无限循环,在该循环中,在某一点上它需要用户输入一些内容。
对于JUnit测试,我在另一个程序中运行该程序,Thread并在JUnit中模拟用户输入Thread。
到目前为止,如果程序从中读取用户输入,则一切正常System.in,因为此流可以轻松替换。但是也存在程序交互的可能性,System.console()当前我的测试无法涵盖。
是否有可能模拟的输入System.console(),例如通过用另一个流替换其输入源?
(注意:JUnit测试必须使用Java 6且没有任何外部库(JUnit和Hamcrest除外)。)
编辑:不幸的是,我无法更改要测试的程序的类。
我正在使用stax来创建我的Web应用程序所需的XML文档.目前我在这样的文件中创建我的XML:
XMLOutputFactory factory = XMLOutputFactory.newInstance();
String output=null;
try
{
XMLStreamWriter writer = factory.createXMLStreamWriter(
new FileWriter("C:\\Junk\\xmlDoc.xml"));
writer.writeStartDocument();
writer.writeStartElement("TagName1");
writer.writeAttribute("AAA", "BBB");
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();
writer.close();
}
catch (XMLStreamException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但是xml文件不是我想要的,我需要在一个中创建我的XML String.不幸的是我无法弄清楚OutputStream我需要哪个对象而不是FileWriter