我为通过Java程序进行文件更新创建了简单程序
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.isitokapp.isitok.Fragments.HomeFragment">
<RelativeLayout
android:id="@+id/teamOkSection"
android:layout_width="match_parent"
android:layout_height="0dp">
<TextView
android:id="@+id/teamOkTopText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:layout_alignParentTop="true"
android:text="Team OK"
android:textSize="11sp"
android:layout_marginLeft="8dp"/>
<LinearLayout
android:id="@+id/teamOkProfilesSection"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@+id/teamOkTopText"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:layout_marginLeft="8dp">
</LinearLayout>
<RelativeLayout
android:id="@+id/teamOkAll"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_below="@+id/teamOkTopText"
android:layout_marginTop="6dp"
android:background="#DEDEDE">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/teamOkAllText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="TÜMÜ"
android:textColor="#303030"
android:textSize="11sp"/>
</RelativeLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/tab_view"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#FFFFFF"
android:layout_below="@+id/teamOkSection"
android:orientation="horizontal">
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/intergalactic_RV"
android:layout_below="@id/tab_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
</android.support.v7.widget.RecyclerView>
<TextView
android:id="@+id/feedNotFoundText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Paylaşım bulunamadı."
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:visibility="gone"/>
<ProgressBar
android:id="@+id/loading_bar"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:indeterminateDuration="4000"
android:visibility="gone"
/></RelativeLayout>
哪个工作成功
但是然后我尝试在ServletContextListener的帮助下做同样的事情,但是在Servlet一切正常的情况下,除了我必须像这样放置完整文件路径
public class AppendToFileExample {
private static final String FILENAME = "TestFile.txt";
public static void main(String[] args) {
BufferedWriter bw = null;
FileWriter fw = null;
try {
String data = " This is new content after edit";
File file = new File(FILENAME);
fw = new FileWriter(file, true);
bw = new BufferedWriter(fw);
bw.write(data);
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
有了这个完整的路径,它可以正常工作,但是当我尝试仅传递这样的文件名时,它不会更新文件
String FILENAME = "C:\\Users\\admin\\workspacetasks\\UpdateText\\TestFile.txt";
所以我的问题是如何在没有完整文件路径的情况下传递文件。是否还有其他方法或其他东西?或任何链接供参考? 谢谢。
下面是我的ServletContextListener
String FILENAME = "test.txt";
然后将在Java程序中调用该程序在这里的方法
public class StartupListener implements ServletContextListener {
private static Logger log = Logger.getLogger(StartupListener.class);
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("contextInitialized");
UpdateTextFile updateTextFile = new UpdateTextFile();
System.out.println("Before");
updateTextFile.exec();
System.out.println("after");
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
如果您的代码没有引发任何异常,则肯定是在不考虑您所想的位置创建了文件。不管是什么,都会相对于应用程序的当前工作目录创建具有相对路径的文件。对于servlet容器,它肯定不在webapp自己的目录内的任何位置。例如,在Tomcat中,它可能是Tomcat的bin
目录。
NB:
与@SilvanBregy现在删除的答案相反,应用程序的CWD不一定与它自己的JAR文件所在的位置有关,并且与@soufrk的评论恰恰相反。与类路径无关。
exists()
测试和createNewFile()
调用都完全浪费时间。 new FileOutputStream()
已经做到了,因此您将迫使系统执行两次所有操作,并删除刚刚创建的文件。
您也不需要呼叫getAbsoluteFile()
:仅File
就足够了。
但是,您确实需要关闭BufferedWriter
。
答案 1 :(得分:-1)
是的。。如果将来有人遇到相同的问题,
只需右键单击程序运行方式>运行配置>左面板上的Tomcat 8>参数,然后根据需要设置其他工作目录...
不知道这样做的正确方法,但是那就是我得到的..如果有人在不更改工作目录的情况下获得了其他任何方式,那么请分享其他信息(如果我得到的话),我会发布它